寻找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();
}