题目链接 :点击查看
题目描述 :
给定 n 个正整数 ai,判定每个数是否是质数。
输入输出格式 :
输入
第一行包含整数 n。
接下来 n 行,每行包含一个正整数 ai。
输出
共 n 行,其中第 i 行输出第 i 个正整数 ai 是否为质数,是则输出 Yes,否则输出 No。
输入输出样例 :
输入
2
2
6
输出
Yes
No
题目分析 :
试除法求质数即为用暴力解法来求质数,质数的判断我们用一个bool isPrime(int x)函数,如果传入的x小于2,说明不是质数,直接返回false。若是数x大于2,就用一个for循环,从2开始,直到n的平方根,枚举其间的所有数,若有数可以整除x则x不是质数,返回false即可。在这里for的判断条件,应写成 i <= n / i, 若是写成sqrt(n)则每一次循环需要调用此函数,而sqrt()的运行速度较慢,若是写成i * i <= n,则n若接近int最大值时,i * i可能会发生越界,故判断条件写成i <= n / i 。
详见如下代码 :
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
bool isPrime(int x) {
if (x < 2) return false;
for (int i = 2; i <= x / i; i ++ ) {
if (x % i == 0) return false;
}
return true;
}
int main() {
int n;
cin >> n;
while (n -- ) {
int x;
cin >> x;
if (isPrime(x)) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}
下面我们给出试除法求素数的相关模板
bool is_prime(int x)
{
if (x < 2) return false;
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
return false;
return true;
}