试除法判定质数

通常用于对一个数的判断

试除法判定质数

给定 $ 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;
}
posted @ 2022-07-23 23:33  MoyouSayuki  阅读(51)  评论(0编辑  收藏  举报
:name :name