高效率求1~10000之間的素數(初級)
阿新 • • 發佈:2019-01-09
①偶數除了二都不是素數,
②一個數 n 如果是合數,那麼它的所有的因子不超過sqrt(n)--n的開方
#include<stdio.h>
#include<math.h>
main()
{
int i,j,n=10000;
printf("2 ");
for(i=3;i<=n;i+=2)
{
for(j=2;j<(sqrt(i)+1);j++)
{
if(i%j==0) break;
}
if(j>sqrt(i)) printf("%d ",i);
}
}
以下是常規求法,有興趣的可以比較一下:
#include<stdio.h> #include<math.h> void main() { //一既不是素數也不是偶數、2是素數 //常規思路 int i, j,n; for (j = 3; j <= n; j++) { for (i = 2; i <= j - 1; i++) if (j%i == 0) break; //有整除就說明不是素數 i==n,表明是素數 }
if(j==i) printf("%d ",i);
}
看不懂留言
(這只是個簡單的高效率,當數量級巨大時,用篩選法具體請看:http://blog.csdn.net/liukehua123/article/details/5482854)