Forsaken喜欢数论(欧拉筛)

Forsaken喜欢数论

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

https://ac.nowcoder.com/acm/problem/53079
题意:
给定一数n,求1~n每个数的最小质因数的和。

分析:
可以用欧拉线性筛素数法,每个数仅使用其最小素因数筛去,开始先打个表,后面直接统计答案就行了。

代码:

#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef unsigned long long ll;
int n,m,v,w,s,i,j;
const int LIM = 3e7 + 10;      
int prime[LIM / 3];
int miniFactor[LIM];
int primepos;
void euler() {
    int tmp;
    for (int i = 2; i < LIM; i++) {
        if (!miniFactor[i]) prime[primepos++] = i, miniFactor[i] = i;
        for (int j = 0; (tmp = i * prime[j]) < LIM; j++) {
            miniFactor[tmp] = prime[j];
            if (!(i % prime[j])) break;
        }
    }
}
int main()
{
    ll sum=0;
    euler();
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        sum+=miniFactor[i];
    }
    printf("%lld",sum);
}
全部评论

相关推荐

2025-11-11 16:40
已编辑
门头沟学院 人工智能
不知道怎么取名字_:这个有点不合理了,相当于已经毕业了,但还是没转正,这不就是白嫖
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务