蓝桥杯 素数求和 筛素数

问题描述
  输入一个自然数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 }
原文地址:https://www.cnblogs.com/fx1998/p/12740377.html