素数筛选法,(谢谢学长)
//普通筛选法 /*0表示素数 int prime[n]; void init(){ for(int i=2;i<=n;i++){ if(book[i]==0){ prime[cnt++]=i; for(int j=i*2;j<=n;j+=i){ book[j]=1;} } } } */ /* 模板 #include<stdio.h> #include<math.h> #define N 100000 void main() { int a[N]; //筛子数组 int i,num; int minp,doub; //minp筛选种子,doub倍数 int n=0; //素数个数,用于输出格式控制 printf("input a num..."); scanf("%d",&num); for(i=2;i<num;i++) //建立筛子 a[i]=1; minp=2; //筛选种子初始化 while(minp<sqrt(num)) //完成整个筛选 { doub=2*minp; //倍数初始化 偶数被 while(doub<num) //完成一轮筛选 { a[doub]=0; //筛去当前倍数 doub+=minp; //计算下一个倍数 } do //计算下一轮筛选种子 { minp++; } while(a[minp]==0); } */
努力变得不白