不是计算机专业,看不懂5楼的代码。只能稍微优化一下楼主的程序。
[ 本帖最后由 ying8501 于 2014-4-2 20:36 编辑 ]
程序代码:
#include <stdio.h> #include <math.h> #define max 300 int main() { int i,k,j,t[max]={0,0,2}, M=sqrt(max); for(i=3; i<max;i+=2)t[i]=i; //将3~max-1中奇数放入数组 // 逐步去掉3的倍数,5的倍数…,(<= sqrt(max))等素数的倍数 // 将k的倍数置为0 k=3; //初始素数 while(k<=M) { for(j=k+2;j<max;j+=2) //从奇数k+2~max中去掉k的倍数 if( j%k==0) t[j]=0; k=k+2; while(t[k]==0)k+=2; //找出下一个素数 } j=0; for(i=2; i<max;i++) { if(t[i]!=0) { printf("%6d",i);j++; if(j%10==0) printf("\n"); } } printf("\n\n 一共有%d个素数.\n",j); return 0; }
[ 本帖最后由 ying8501 于 2014-4-2 20:36 编辑 ]