素数的判定

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y O L O.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值