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;
}

浙公网安备 33010602011771号