
我很久没写素数筛了,今天遇到,忘记怎么写了,惭愧惭愧。不过我重新找了一份素数筛代码,从空间利用率上,比之前的好上不少,特此记录。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include <vector> #include <algorithm> using namespace std; const int maxn = 1000000; int prime[maxn + 1]; vector<int> v; void () { for (int i = 2; i <= maxn; i++) { if (prime[i] == 0) prime[++prime[0]] = i; for (int j = 1; j <= prime[0] && prime[j] <= maxn / i; j++) { prime[prime[j] * i] = 1; if (i % prime[j] == 0) break; } } } int main() { is_p(); for (int i = 2; i <= prime[0]; i++) { if (*lower_bound(prime + 1, prime + prime[0], i) == i) { v.push_back(prime[i]); } } int N; scanf("%d", &N); printf("%d", *lower_bound(v.begin(), v.end(), N)); return 0; }
|
近期评论