质数判断

对于大于 11 的数,如果除了 11 和它本身,它不能再被其它正整数整除,那么我们说它是一个质数。晓萌想判断一个数是不是质数,希望找你写个程序,帮助她进行判断。

输入格式

输入包括一行,为一个整数 N

输出格式

输出包括一行,如果晓萌给出的整数 NN 为质数,那么输出YES;如果 NN 不是质数,那么输出NO。

样例输入

3

样例输出

YES

1)最容易想到的,也是我一开始想到的方法便是让被测数依次除以2~N-1的数,如果存在一个能整除的,则为非质数,否则为质数。

#include <iostream>
    using namespace std;
    int main()
    {
         int N=0;
        cin>>N;

        if(1<N<=1000)
        {

            for(int i=2;i<=N-1;i++)
            {
                if(N%i==0)
                {
                    cout<<"NO"<<endl;
                    return 0;}

            }
                cout<<"YES";
        }
        else
        {
             cout<<"please input from 1 to 1000"<<endl;
        }
        return 0;
    }

2)上述判断方法,明显存在效率极低的问题。对于每个数n,其实并不需要从3判断到n-1,这里用到一个判别质数的算法,一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数

#include <iostream>
#include <cmath>
using namespace std;
bool IsPrime(int Num)
{
    int tempt=(int)sqrt((float)Num);
    for(int i=2;i<=tempt;i++)
    {
        if(Num%i==0) return 0;
    } 
    return 1;
}
int main()
{
    int N=0;
        cin>>N;
   if(IsPrime(N)) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}

其中要注意的是sqrt的运用,该函数是在cmath库里面,因此要在预编译之前包含该库。另外sqrt的形参是float和double型,因此要将Num强制转换为float型,此外还要将开方的结果强制转换为int型(因为等号左边的tempt是int型)
int tempt=(int)sqrt((float)Num);

3)还有一种方法是在以下博文中看到的,没有具体理解什么意思,有兴趣的朋友可以自己看一下。

http://blog.csdn.net/huang_miao_xin/article/details/51331710

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值