总时间限制:
1000ms
内存限制:
65536kB
描述
找出N以内的素数,并求和。
输入
一个正整数N,N<=10^7
输出
一个整数,表示N以内素数之和。
样例输入
10
样例输出
17
#include <iostream>
#include <stdio.h>
using namespace std;
const long long Max=1e7+1;
long long pr[Max+1];
bool e[Max];
long long Es(long long n)
{
e[0]=false,e[1]=false;//0.1特判一下表示都不是素数
for(int i=2;i<=n;i++)
{
e[i]=true;//暂时将其他的数表示为素数
}
for(int i=2;i*i<=n;i++)//从2开始筛除并且筛除的是所有i的平方所以可以只进行到根号n
{
for(int j=i*i;j<=n;j=j+i)//开始进行筛除从i的倍数开始每次多+i即可表示i的倍数递增
{
e[j]=false;//所有倍数都将不会是素数(因为素数的基本定义)
}
}
long long ans=0;//定义最终答案
for(int i=2;i<=n;i++)//从而开始寻找筛选后的素数
{
if(e[i])
{
ans+=i;
}
}
return ans;
}
int main()
{
long long n;
cin>>n;
long long ans;
ans=Es(n);
cout<<ans;
return 0;
}
须注意的是答案可能很大所以利用long long来定义