Problem Description
题目很简单,给你一个整数,判断是不是素数,如果是,输出YES,否则输出NO。
Input Description
多组测试数据。每组一行(<10^9),当输入-1时结束。
Output Description
对每组测试数据,在一行中输出YES或NO。
Sample Input
2
3
9
-1
Sample Output
YES
YES
NO
个人分析:
我的素数判定方法被称为“试除法”,也叫“质因数分解法”。基本思想是,对于一个大于1的正整数n,如果它存在小于等于√n的因子,那么n就不是质数,否则n是质数。
原理是:个大于1的正整数,如果它除了1和本身以外没有其他因子,那么它就是质数。所以我们只需要判断一个数n是否存在小于等于√n的因子,如果存在,那么n就不是质数,否则n就是质数。比如8除了本身和1外还有因子2,4,而√8在2-3之间,他的因子分布在√8的两边,所以只需要判断是否存在小于等于√n的因子即可,大大的减少了算法的执行时间。
代码如下:
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
bool prime(int n)
{
if(n <= 1)
{
return false;
}
int m = sqrt(n);
for(int i = 2; i <= m; i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
if(prime(n))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}