寻找1-n最小的质因数相加,最直接的暴力就是从素数表中找到最小因数,联想到素数筛的过程可以直接找到最小质因数。
这里要注意的点是:理论上3e7是不会爆int的,但是在for(long long j=ii;j<=n;j+=i)这句中,ii会爆int,导致出错。
#include<iostream>
#include<math.h>
using namespace std;
int a[(int)3e7+5];
int main()
{
int n;
cin>>n;
long long cnt=0;
for(long long i=2;i<=n;i++)
{
if(!a[i])
{
cnt+=i;
for(long long j=i*i;j<=n;j+=i)
{
if(!a[j])
{
cnt+=i;
a[j]=1;
}
}
}
}
cout<<cnt<<endl;
getchar();
getchar();
}


京公网安备 11010502036488号