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

Posted 再吃一个橘子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断素数的快速算法 sqrt()相关的知识,希望对你有一定的参考价值。

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

//判断数num是不是素数
for(i=2;i<num;i++){

    if(num%i==0)
         return 0;

    return 1;
}

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

当然了,先附上代码段

//判断数num是不是素数
for(i=2;i<=sqrt(num);i++){

    if(num%i==0)
         return 0;

    return 1;
}

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

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

 

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

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

//判断数20是不是素数
for(i=2;i<=sqrt(20);i++){

    if(num%i==0)
         return 0;

    return 1;
}

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

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

以上是关于判断素数的快速算法 sqrt()的主要内容,如果未能解决你的问题,请参考以下文章

素数专题——素数筛法

代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

素数判断算法(python实现)

素数判断算法(基于python实现)

素数判定Miller_Rabin 算法详解

大素数高效算法判断