200万以内素数求和
这是刚开始写的代码,有点长。
#include <stdio.h> #include <math.h> /* 200万以内素数求和 */ int main() { int i; long long int p=0; int n,num,s,tmp=0; scanf ("%d",&n); for (num=0;num<=n;num++) { if(num ==2|| num==3 )//对2||3特殊处理 { p+=num; continue;} { if(num %6!= 1&&num %6!= 5)//如果是素数,必然在6的旁边 continue; tmp=sqrt( num); for(i=2;i <=tmp; i++ )//在6的旁边也不一定是素数,再次进行判断 {s=0; if(num %i== 0) { s=1; break; } } if (s==0) //实现累加 p+=num; } } printf ("%lld",p); return 0; }
最后看到了网上一个代码,效率极高
然后敲了一遍
#include <stdio.h> /* 2000万内素数求和 */ int a[20000001]={0};//定义一个20000001的容器 int main() { int i,j,n; long long p=0; scanf ("%d",&n); for (i=2;i*i<=n;i++)//从2开始,对其倍数标记 { if (a[i]==1) continue; for (j=i*i;j<=n;j+=i)//进行标记 a[j]=1; } for (i=2;i<=n;i++) if (a[i]==0)//未标记的即为素数 p+=i; printf ("%lld",p); return 0; }