试除法判定质数
通常用于对一个数的判断
试除法判定质数
给定 $ n $ 个正整数 $ a_i $,判定每个数是否是质数。
输入格式
第一行包含整数 $ n $。
接下来 $ n $ 行,每行包含一个正整数 $ a_i $。
输出格式
共 $ n $ 行,其中第 $ i $ 行输出第 $ i $ 个正整数 $ a_i $ 是否为质数,是则输出 Yes
,否则输出 No
。
数据范围
$ 1 \le n \le 100 \(, \) 1 \le a_i \le 2^{31}-1 $
输入样例:
2
2
6
输出样例:
Yes
No
AC代码(有注释)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int is_p(int x) // 试除法
{
if(x < 2) return 0; // 当x = 负数 0 1时,不是质数,直接特判掉
for(int i = 2; i <= x / i; i++) // i <= sqrt(x)比较慢 i * i <= x怕爆 i <= x / i最为妥当
// x = 2 的情况会直接跳过,因此不用特判
{
if(x % i == 0) return 0; // 一旦一个数被整除了,那么他就不是质数
}
return 1; // 没有数能整除x,则它必然是质数
}
int main()
{
int n;
scanf("%d", &n);
while (n -- )
{
int x;
cin >> x;
is_p(x) ? puts("Yes") : puts("No");
// 三目运算符较为简便,相当于:
// if (is_p(x) puts("Yes");
// else puts("No");
}
return 0;
}