题目描述
给定n个正整数ai,判定每个数是否是质数。
输入格式
第一行包含整数n。
接下来n行,每行包含一个正整数ai。
输出格式
共n行,其中第 i 行输出第 i 个正整数ai是否为质数,是则输出“Yes”,否则输出“No”。
数据范围
1≤n≤100,
1≤ai≤2∗109
样例
输入样例:
2
2
6
输出样例:
Yes
No
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int n,a[110];
bool pdzs(int m){
for(int i=2;i<=sqrt(m);i++){
/*
只需枚到m开根号取整就行
一个数n如果不是素数那么一定存在若干因子(不少于2个)
假设最小的因子是p,那么p*p<=n,所以p<根号n
只要找到不为1的p,它就不是质数
*/
if(m%i==0) return false;
}
return true;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
if(a[i]==2)//2是特殊的质数,需要特判
{
printf("Yes\n");
continue;
}
if(a[i]<=1)//小于等于的数1既不是质数,也不是合数,需要特判
{
printf("No\n");
continue;
}
bool b=pdzs(a[i]);//判断a[i]是不是质数
if(b==true) printf("Yes\n");
else printf("No\n");
}
}