素数筛法,以51nod1181为例 发表于 2019-04-02 | 更新于 2019-07-17 | 阅读次数: 我很久没写素数筛了,今天遇到,忘记怎么写了,惭愧惭愧。不过我重新找了一份素数筛代码,从空间利用率上,比之前的好上不少,特此记录。 题目在这里代码12345678910111213141516171819202122232425262728293031323334353637#include <stdio.h>#include <vector>#include <algorithm>using namespace std;const int maxn = 1000000;int prime[maxn + 1];vector<int> v;void is_p(){ 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(); /*printf("%d\n",prime[0]);*/ 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;}