当前位置:   article > 正文

判断素数的快速算法 sqrt()_质数 sqrt

质数 sqrt

我们在日常判断素数的程序中常用到如下代码

  1. //判断数num是不是素数
  2. for(i=2;i<num;i++){
  3. if(num%i==0)
  4. return 0;
  5. return 1;
  6. }

这样写无疑是没有问题的,但是我们实际做题可能会有算法时间复杂度的要求,或者说数据大的时候我们会等很久,算法效率低,那么有没有一种好的算法可以更快地判断是不是素数呢?

当然了,先附上代码段

  1. //判断数num是不是素数
  2. for(i=2;i<=sqrt(num);i++){
  3. if(num%i==0)
  4. return 0;
  5. return 1;
  6. }

sqrt()函数是用来判断开根号的,那么我们这样用是为何呢?

比如想判断20是不是素数,我们都知道素数是除了1和数本身没有其他公约数的数,我们看,20可以分成如下公因子:

如果我们用老办法i=2到20一个一个判断是可以,但是没有必要

因为,我们可以使用sqrt来判断

  1. //判断数20是不是素数
  2. for(i=2;i<=sqrt(20);i++){
  3. if(num%i==0)
  4. return 0;
  5. return 1;
  6. }

 我们看到sqrt(20)的值是4.47...

其实我们只需要判断前半段就行,因为有2肯定有10,有4肯定有5

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/75284
推荐阅读
相关标签
  

闽ICP备14008679号