1. 程式人生 > >1089 習題6-1 篩選法求素數

1089 習題6-1 篩選法求素數

題目描述

從鍵盤上輸入一個正整數N(N<=100),用篩選法求N之內的素數

輸入

正整數N

輸出

0~N之間的素數,每個素數一行

樣例輸入

100

樣例輸出

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
#include<stdio.h>
#include<math.h>
int main()
{
	int i,j,N,a[100];
	scanf("%d",&N);
	for(i=1;i<=N;i++)
	a[i]=i;
	a[1]=0;
	for(i=2;i<sqrt(N);i++)
		for(j=i+1;j<=N;j++)
		{
			if(a[i]!=0&&a[j]!=0)
			if(a[j]%a[i]==0)
			a[j]=0;
		}
	for(i=1;i<=N;i++)
	{
		if(a[i]!=0)
		printf("%d\n",a[i]);
	}
	return 0;
}


相關推薦

1089 習題6-1 篩選素數

題目描述從鍵盤上輸入一個正整數N(N<=100),用篩選法求N之內的素數輸入正整數N輸出0~N之間的素數,每個素數一行樣例輸入100樣例輸出2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83

程式基本演算法習題解析 使用篩選1~100之內的所有素數

思路:              第一個素數是2,把後面是2的整數倍的數全部篩去,篩去的數置0;從第一個素數2向後找出最小的未被篩去的數3,把它後面是3的整數倍的數全部篩去並置0;重複上述過程,直到新找到的素數大於1

篩選素數

return include main 技術 ret printf int images ima C語言 #include <stdio.h>#include <math.h>int main(){int i,j,a[100],N;scanf("

6-1 使用函式素數和 (20 point(s))

6-1 使用函式求素數和 (20 point(s)) 本題要求實現一個判斷素數的簡單函式、以及利用該函式計算給定區間內素數和的函式。 素數就是隻能被1和自身整除的正整數。注意:1不是素數,2是素數。 函式介面定義: int prime( int p ); int PrimeSum(

關於用埃氏篩選素數python程式碼的一些理解

原始碼 來自廖雪峰-filter 演算法描述參考原文。 程式碼塊如下: def _odd_iter(): # 生成一個無限序列的奇數Generator z = 1 while True: z = z+2 yield z def

【演算法】3.Eratosthenes篩選與尤拉篩選素數

Eratosthenes篩法 1.原理 一個合數可以分成幾個素數的和,如果把素數(最初只知道2)的倍數全都去掉,剩下的就都是素數了 2.思路分析 去除0,1(既不是素數又不是合數) 找到佇列中最小的素數,刪除其倍數 3.程式碼實現(只給出了函

篩選素數演算法

篩選法生成質數表(素數表)的基本思想如下: 假設有一個數組存放整數2 ~ N,如下所示: 首先將2的倍數篩去(實際操作時可以將陣列對應的值設定為0),得到: 然後將3的倍數篩去,得到: 再一次將5的倍數篩去,7的倍數篩去,11的倍數篩去......

篩選素數 java

思路:在一個boolean型別的陣列中 ,從第二個開始遍歷,將2的倍數置為false,3的倍數置為false。例項說明一下: 求0-10的素數,定義陣列boolean b[]=boolean[11];

Eratosthenes篩選素數的演算法

public class Sieve{  public static void main(String[] args)  {     int max = 100;  //假設求100以內的素數     boolean[] isPrime = new boolean[max+1

演算法:埃拉托色尼篩選素數(Python和Java)

來自百度百科–埃拉托色尼篩選法: (1)先把1刪除(現今數學界1既不是質數也不是合數) (2)讀取佇列中當前最小的數2,然後把2的倍數刪去 (3)讀取佇列中當前最小的數3,然後把3的倍數刪去 (4)讀取佇列中當前最小的數5,然後把5的倍數刪去 (5)讀

埃拉托色尼篩選-素數

// 埃拉托色尼篩選法- 求素數 void getprimes(int n) { int result[n]; for (int i = 0; i < n; ++i) { result[i] = i + 1; }

6-1 使用函式素數和(20 分)

本題要求實現一個判斷素數的簡單函式、以及利用該函式計算給定區間內素數和的函式。素數就是隻能被1和自身整除的正整數。注意:1不是素數,2是素數。函式介面定義:int prime( int p ); int PrimeSum( int m, int n ); 其中函式prime當用戶傳入引數p為素數時返回1,否則

Eratosthenes篩選素數

文章關鍵字:|Eratosthenes|篩選|素數|  public class Sieve{    public static void main(String[] args)    {      int max = 100; //假設求100以內的素數      bool

HDU Largest prime factor(埃拉托色尼篩選素數模板改動)

題意:給你一個數,求它這個數的最大素因子在素數表的第幾位 思路:剛開始思路有一點錯誤,看錯誤程式碼 錯誤程式碼: #include <iostream>0 #include <cs

C++篩選素數(簡單)

篩選法求素數經常是求解其他問題的前提 程式碼: #include <bits/stdc++.h> using namespace std; const int N = 10000

篩選素數(三種)

第一種:剔除2 3 4 5 6 ... ... 的倍數 在i從2開始的增一變化過程中,剔除i的倍數即j*i(j是大於等於2的自然數,j的上限是問題規模M) 為了減少重複步驟,可以每當i遞增到等於第一個沒有被剔除的(素)數時再剔除該數的倍數, 重複上述過程至i到達問題規模

關於篩選素數,選擇對一串數字進行排序,折半查詢查詢數字

1.關於篩選法求素數 演算法描述: 原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質數的倍數篩掉。 如圖: 程式碼描述l:(查詢100以內的素數) #include <stdio

【C語言】 利用篩選100以內的素數

演算法思路: 原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質數的倍數篩掉。 程式碼如下: //C語言 篩選法求100以內的素數 //原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經

python用遞迴篩選N以內的孿生質數(孿生素數)--附氣泡排序和插入排序練習

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for迴圈來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞迴篩選法來解決這個問題。 新建List,然後從第0位開始,如果後面的能被這個數整除,則從陣

java用遞迴篩選N以內的孿生質數(孿生素數)--附氣泡排序和插入排序練習

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for迴圈來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞迴篩選法來解決這個問題。 新建List<Integer>,然後從第0位開始,如