最小质因数相加——素数筛

Forsaken喜欢数论

https://ac.nowcoder.com/acm/problem/53079

寻找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();
}
全部评论

相关推荐

M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务