题目
对于任意一个数 ,
会返回
的最小质因子。如果这个数没有最小质因子,那么就返回 0。
现在给定任意一个 ,求
的值。
解题思路
在从 1 到 遍历整数时,使用筛法求素数。
如果本身是素数,那么它本身就是它的最小质因子,累加计入 。
遍历由该素数生成的合数,如果还没访问过,表示这个合数的最小质因子就是该素数,累加计入 。
C++代码
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<bool> vis(n+1, false);
long long ans = 0;
for(long long i=2; i<=n; ++i){
if(!vis[i]){
ans += i;
for(long long j=i*i; j<=n; j+=i){
if(!vis[j]){
vis[j] = true;
ans += i;
}
}
}
}
cout << ans << endl;
return 0;
} 
京公网安备 11010502036488号