題目描述
用簡單素數篩選法求N以內的素數。
輸入
N
輸出
2~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
解題:這道題明白了素數的定義之後就不難,素數的定義是,大於1的自然數,除了1和它本身,不能被其他自然數整除的數。換句話說就是該數除了1和它本身沒有其他因數,相反的,能被其他自然數整除的就是非素數。知道了這個之後,你會想到,又是關於因數的問題,應該又要用循環控制,然後一個一個驗證,最後輸出。值得注意的是,題目要求讓你輸出的是素數,可是你只知道用循環控制,該數對其他數求餘的結果是0得到的結果是非素數,這時候你能能會想到該數被其他數整除不等於0就是素數了,非也,我這樣試過,結果是不對的。展開來說,因爲素數的判斷條件很嚴格,是一個因數都不能有,而非素數只要有一個因數就行,總共有幾個不管。所以在這種問題下(你只知道跟你求的結果的相反的條件時),我們就應該想到要用一個flag標識,把你知道條件的結果都標識上,那麼爲標識的剩下的就可以輸出了。
源代碼:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int i=2;i<=n;i++)
{ int flag=0;//
for(int j=2;j<i;j++)
{
if(i%j==0)
{
flag=1;
break; //注意這裏只要有一個能被它整除的數就應該退出循環
}
}
if(flag==0)
printf("%d\n",i);
}
}