题目
对于任意一个数 ,会返回 的最小质因子。如果这个数没有最小质因子,那么就返回 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; }