1005 Forsaken喜欢数论 素数筛性质:每个数都被最小的质因子判掉 数论
链接:https://ac.nowcoder.com/acm/contest/26656/1005
来源:牛客网
题目描述
Forsaken有一个有趣的数论函数。对于任意一个数xx,f(x)f(x)会返回xx的最小质因子。如果这个数没有最小质因子,那么就返回0。
现在给定任意一个nn,Forsaken想知道\sum_{i = 1}^{n}{f(i)}∑
i=1
n
f(i)的值。
输入描述:
一个整数nn。
输出描述:
一个整数代表上面的求和式的值。
示例1
输入
复制
4
输出
复制
7
备注:
1 \leq n \leq 3e71≤n≤3e7
分析
素数筛
1.大小3e7以上
2.每个数被自己的最小质因子判掉
//-------------------------代码---------------------------- #define int ll const int N = 3e7 + 10; int n,m,ans,cnt; bool primes[30000010]; int pos[N]; void get_primes() { if(n == 1) { cout<< 0 <<endl; rt; } for(int i = 2;i<=n;i++) { if(!primes[i]) { ans += i; pos[cnt ++ ] = i; } for(int j = 0;j< cnt && pos[j] * i <= n;j++) { primes[pos[j] * i] = 1; ans += pos[j]; if(i % pos[j] == 0) break; } } cout<<ans<<endl; } void solve() { cin>>n; get_primes(); } signed main(){ clapping();TLE; // int t;cin>>t;while(t -- ) solve(); // {solve(); } return 0; } /*样例区 */ //------------------------------------------------------------