2906 - 求素数
时间限制 : 1 秒
内存限制 : 128 MB
给定一个正整数N,求[2,N]之间的所有素数。
题目输入
有多组测试数据。
第一行为一个正整数n,表示有n组测试数据。
接下来一行,输入一个正整数N,3<N<=1000。
题目输出
输出[2,N]之间的所有素数。
同一次输入与输出紧挨,每个输出之后空一行再进行下次输入。
对于输入不合法的数据输出ERROR
输入/输出样例
输入格式
3 3 5 59
输出格式
ERROR 3 17
C++解答
#include <bits/stdc++.h> using namespace std; const int N = 1e7 + 9; int a[N]; int k, p[N]; //p[1] ~ p[k]共k个素数 int main() { a[0] = a[1] = 1; for (int i = 2; i <= 1e7; i ++) { if (!a[i]) p[++ k] = i; for (int j = 1; p[j] <= 1e7 / i; j ++) { a[i * p[j]] = 1; if (i % p[j] == 0) break; } } int n, x, cnt; cin >> n; while (n --) { cnt = 0; cin >> x; if (x <= 3 || x > 1000) { cout << "ERROR" << endl << endl; continue; } for (int i = 2; i <= x; i ++) { if (!a[i]) cnt ++; } if (!cnt) cout << "ERROR" << endl << endl; else cout << cnt << endl << endl; } return 0; }