问题描述
输入一个自然数n,求小于等于n的素数之和
样例输入
2
样例输出
2
数据规模和约定
测试样例保证 2 <= n <= 2,000,000
#include<iostream>
#include<cmath>
#include <iostream>
#include <iomanip>
using namespace std;
int isPrime(long long n)
{ //返回1表示判断为质数,0为非质数,在此没有进行输入异常检测
float n_sqrt;
if(n==2 || n==3) return 1;
if(n%6!=1 && n%6!=5) return 0;
n_sqrt = floor(sqrt((float)n));
for(long long i=5; i<=n_sqrt; i+=6)
{
if(n%(i)==0 | n%(i+2)==0) return 0;
}
return 1;
}
int main()
{
long long n, sum = 2;
cin >> n;
for(long long i=3; i<=n; i++)
if(isPrime(i))
{//cout << i<< " ";
sum += i;}
cout << sum << endl;
return 0;
}