输入格式:
输入在第一行给出一个正整数N(<=10),随后N行,每行给出一个小于231的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出“Yes”,否则输出“No”。
输入样例:2
11
111
输出样例:
Yes No
题目分析:判断n是否是素数,其实不必被2~(n-1)范围内的各整数除去,只须将n被2~n/2间的整数除去即可,甚至只须被2~√2之间的整数除即可。例如,判断17是否是素数,只须将17被2,3和4除即可,如都除不尽,n必为素数。这样做可以大大减少循环次数,提高执行效率。
代码:
#include<stdio.h>
#include<math.h>
int main()
{
long long i,t,n,k,f;
scanf("%lld",&t);
while(t>0)
{
t--;//t组测试
f=0;//f是个标记变量
scanf("%lld",&n);
if(n<2) printf("No\n");
else if(n==2)
{
printf("Yes\n");
continue;//不能用break,在这里只是终止本次循环
}
else
{
k=sqrt(n);
for(i=2;i<=n-1;i++)
{
if(n%i==0) break;
if(i>=k+1)
{
f=1;
break;
}
}
if(f==0) printf("No\n");
if(f==1) printf("Yes\n");
}
}
return 0;
}