エラトステネスの篩を用いて、素数表を作るだけの問題。2006年国内予選の問題Aも素数表を使う問題だったが、今回の方が簡単。
#include <iostream> #include <cstring> using namespace std; int n; #define MAX 300000 char primes[MAX]; void e() { memset(primes, 1, sizeof(primes)); primes[1] = 0; for (int i = 2; i < MAX; i++) for (int j = 2*i; j < MAX; j += i) primes[j] = 0; } int main() { e(); while (cin >> n, n) { int ans = 0; for (int p = n+1; p <= 2*n; p++) if (primes[p]) ans++; cout << ans << endl; } return 0; }
0 件のコメント:
コメントを投稿