1. 程式人生 > >高效率求1~10000之間的素數(初級)

高效率求1~10000之間的素數(初級)

偶數除了二都不是素數,

一個數 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)