求2-2000的所有素数,有足够的内存,要求尽量快。
普通的算法实现:
#include<stdio.h> int main() { for(int i=2;i<=20;i++) for(int j=2;j<=i;j++) { if((i%j==0)&&(j!=i)) break; else if(j==i) printf("%d\n",i); } }
这代码很简单,但是时间复杂度大,效率低,需要优化
在网上看到筛选法实现:
1 #include<stdio.h> 2 int findvalue[2000]={2}; 3 static int find=1; 4 bool adjust(int value) 5 { 6 for(int i=0;i<find;i++) 7 { 8 if(value==2) 9 return true; 10 if(value%findvalue[i]==0) 11 return false; 12 } 13 findvalue[find++]=value; 14 return true; 15 } 16 int main() 17 { 18 int i; 19 for( i=2;i<20;i++) 20 adjust(i); 21 for( i=0;i<find;i++) 22 printf("%d\n",findvalue[i]); 23 }