/*
素数:只能被自身和1整除的大于1的正整数
假设n存在大于等于sqrt(n)的因数y,则z=n/y必同时为n的因数,且其值<=sqrt(n)
关键:
1要将sqrt(n)的值先计算出来,不能放在循环中,这回导致循环多少次就计算多少次平方根
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
bool isPrime(int a)
{
if(a < 1)
{
return false;
}
else
{
int iBound = (int)sqrt(a*1.0);
//for(int i = 2 ; i <= sqrt(a) ; i++)//技巧:耗时
for(int i = 2 ; i < iBound ; i++)
{
if(0== a%i )
{
return false;
}
}
return true;
}
}
int main(int argc,char* argv[])
{
int iNum;
while(EOF!=scanf("%d",&iNum))
{
if(isPrime(iNum))
{
printf("Yes\n");
}
else
{
printf("NO\n");
}
}
system("pause");
getchar();
return 0;
}