问题描述
输入一个自然数n,求小于等于n的素数之和
样例输入
2
样例输出
2
数据规模和约定
测试样例保证 2 <= n <= 2,000,000
数论知识,线性筛。
待复习。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 2000010; 4 int primes[N], cnt; 5 bool st[N]; 6 void get_prime(int x) { 7 for (int i = 2; i <= x ; i++) { 8 if (!st[i]) { 9 primes[cnt++] = i; 10 } 11 for (int j = 0; primes[j] <= x / i; j++) { 12 st[primes[j] * i] = true; 13 if (i % primes[j] == 0) { 14 break; 15 } 16 } 17 } 18 } 19 int main() { 20 int n; 21 cin >> n; 22 get_prime(n); 23 long long ans = 0; 24 for (int i = 0; i < cnt; i++) { 25 ans += primes[i]; 26 } 27 cout << ans << endl; 28 return 0; 29 }