C++判断是否是素数(质数)

傷城~ 2023-02-27 03:23 95阅读 0赞

素数就是除1和它本身外没有其他的因数了叫做素数
1只有1个因数1,所有1既不是合数也不是素数
4有3个因数,属于合数
2只有2个因数,属于质数或素数

那么怎么判断一个数是素质数呢

在这里插入图片描述
拿64来说,64有因数1,2,4,8,16,32,64

看64的因数是成对出现的

在这里插入图片描述
结论:任何一个合数它的因数都是成对出现的
那么是素数怎么判断
为了让程序更加整洁,快速,我们不妨可以这样想
一个数如果它的一半还没有因数,那么这个数就是质数

抛开1和它本身,把除数定为2

我们第一次判断这个数时,把初始的除数定为2
3%2=1,不能整除
此时2已经是3的一半多了,所以3是质数


17%2=1,不能整除
将除数+1为3
17%3=2,不能整除
将除数+1为4
17%4=1,不能整除



一直到
17%9=8,不能整除
此时9已经大于了17的一半,所以17是质数

更加整洁使用开平方sqrt

我们已经会判断是不是质数了,但是为了更加整洁
将大于n的一半改为大于开n的平方
64的平方根是8,那么8的前面已经有因数2,4了
9的平方根是3,那么3正好是9的因数
可见,这样的算法更加整洁,快速

源码

  1. #include<iostream>
  2. #include<cmath>//开平方必须加入头文件
  3. using namespace std;
  4. bool op(int n,int m)//判断素数,n为判断的数,m为除数,初始值为2
  5. {
  6. if(m>sqrt(n)) return true;//如果搜到了它的开平方还没有因数,判断这个数一定是素数,返回值为true
  7. if(n%m==0) return false;//如果可以被整除则不是素数,返回值为false
  8. op(n,m++);//递归,每次让除数m+1
  9. }
  10. int main()
  11. {
  12. int n;
  13. cin>>n;//输入一个数
  14. if(op(n,2))//如果返回值为true
  15. {
  16. cout<<n<<"为一个素数";//输出n为一个素数
  17. }
  18. else//如果返回值为false
  19. {
  20. cout<<n<<"不为一个素数";//输出n不为一个素数
  21. }
  22. return 0;
  23. }

发表评论

表情:
评论列表 (有 0 条评论,95人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++判断是否素数质数

    素数就是除1和它本身外没有其他的因数了叫做素数 1只有1个因数1,所有1既不是合数也不是素数 4有3个因数,属于合数 2只有2个因数,属于质数或素数 那么怎么判

    相关 c#判断一个数是否素数

    素数是只能被1或本身整除,且不能为其他两个整数的乘积。1、2、3本身就是素数,判断一个数是否为素数,只需要用这个值依次除以2到它的开方数,如果其中有一个数可以整除,那么该值不为