线性筛素数--编程练习题

题目来源:P3383【模板】线性筛素数
题目描述
如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)

输入格式
第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。

接下来M行每行包含一个不小于1且不大于N的整数,即询问该数是否为质数。

输出格式
输出包含M行,每行为Yes或No,即依次为每一个询问的结果。

输入输出样例
输入 #1 复制
100 5
2
3
4
91
97
输出 #1 复制
Yes
Yes
No
No
Yes
说明/提示
时空限制:500ms 128M

数据规模:

对于30%的数据:N<=10000,M<=10000

对于100%的数据:N<=10000000,M<=100000

样例说明:

N=100,说明接下来的询问数均不大于100且不小于1。

所以2、3、97为质数,4、91非质数。

故依次输出Yes、Yes、No、No、Yes。
特别注意题目要求的时间限制和输入输出方式,可以输入一个待测值输出一个Yes/No,不是一次性将所有待测值输完,再输出所有Yes/No.

#include
#include
using namespace std;
int IsSushu(int x)		//函数判断是否为质数,是则返回1,否返回0
{
	if (x == 1)
			return 0;
	for (int i = 2; i <=sqrt(x) ; i++)
	{
		if (x % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int N, M;
	int a;
	cin >> N >> M;
	while(M--)
	{
		cin >> a;
		if(IsSushu(a))
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
	return 0;
}

你可能感兴趣的:(线性筛素数--编程练习题)