acwing题目

数论

质数

质数的判定

质数的定义:质数在大于1的整数中,如果只包含1和本身这两个约数,就被成为质数,或者叫素数。

判定质数的方法:(1)试除法(将i-n-1的数轮流除以n,如果存在一个能除尽n的数,n则不是质数,反之则是质数。)

因为一个数的约数都是成对出现的,\(d|n代表d能整除n,如果d|n,则\frac{n}{d}也能整除n,即\frac{n}{d}|n\)。因此在枚举时,我们可以只枚举当中较小的一个。因此只需要枚举\(d\le n/d\),即\(d\le \sqrt{n}\)即可。

acwing-866.试除法判定质数

题目描述

给定n个正整数\(a_i\),判定每个数是否是质数。

输入格式

第一行包含整数n。接下来n行,每行包含—个正整数\(a_i\)

输出格式

共n行,其中第i行输出第i个正整数a是否为质数,是则输出Yes,否则输出No.

数据范围

\(1\le n\le 100,1\le a_i\le 2^{31}-1\)

输入样例:

2
2
6

输出样例:

Yes
No
#include <iostream>
#include <cstdio>
using namespace std;

bool is_prime(int n)
{
    if(n < 2) return false;
    for(int i = 2; i <= n / i; i ++ )  // 最简单的做法是i < n,关键:i<= sqrt(n)这个判断条件速度太慢,i * i < n这个判断条件可能存在i * i溢出的情况。所以最好的判断条件是i <= n / i。
        if(n % i == 0)
            return false;
    return true;
}

int main()
{
    int T, n;
    cin >> T;
    while(T--)
    {
        cin >> n;
        printf("%s\n",is_prime(n)? "Yes" : "No");
    }
    return 0;
}
posted @ 2023-06-01 18:37  Omega丶  阅读(14)  评论(0)    收藏  举报