算法提高 素数求和 ——筛法求素数

来源:互联网 发布:二少捏脸数据 网盘 编辑:程序博客网 时间:2024/05/16 18:41
问题描述
  输入一个自然数n,求小于等于n的素数之和
样例输入
2
样例输出
2
数据规模和约定

  测试样例保证 2 <= n <= 2,000,000


数据量比较大,用函数判断肯定超时,用筛法求素数可以大大提高速度,即当i为素数时,给定小于等于n范围内i的倍数全是和数。

#include <iostream>  #include <cstring>  using namespace std;   int isprime[2000001];//用数组盛放每个数是否是素数,-1表示是,0表示不是int main() {memset(isprime,-1,sizeof(isprime));//初始化都为-1int n;long long sum=0;//一定要用long longcin>>n;for(int i=2;i<=n;i++)if(isprime[i]==-1){sum+=i;for(int j=2;j*i<=n;j++)//筛法isprime[i*j]=0;}cout<<sum<<endl;    return 0;  }  


1 0