2906 - 求素数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

给定一个正整数N,求[2,N]之间的所有素数。

题目输入

有多组测试数据。

第一行为一个正整数n,表示有n组测试数据。

接下来一行,输入一个正整数N3<N<=1000

题目输出

输出[2N]之间的所有素数。

同一次输入与输出紧挨,每个输出之后空一行再进行下次输入。

对于输入不合法的数据输出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;
}