题意: 表示每个数最小的质因子
比如f(10)=2;f(39)=3
然后求
题解:素筛
2 3 4 5 6 7 8 9 10 11.....
2 3 2 5 2 7 2 3 2 11......
如果当前数是某一个质数的倍数,那么这个数不是质数,然后素筛是从小到大筛的,所以直接符合题意
另外:素筛的复杂的不是 ,大致是 级别的
#include<bits/stdc++.h> using namespace std; long long n,cnt,sum; int a[34000000]; int p[30040000]; void su() { for(int i=2;i<=n;i++) { if(!a[i]) { sum+=i; p[cnt++]=i; } for(int j=0;j<cnt&&i*p[j]<=n;j++) { a[i*p[j]]=1; sum+=p[j]; if(i%p[j]==0)break; } } cout<<sum; } int main() { scanf("%lld",&n); su(); }