质数算法详解

质数是什么

质数又称 素数 。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定 1既不是质数也不是合数 )。

接下来,我们一步步探索质数算法的奥秘。

判断质数的基本方法

根据质数的概念,质数只有两个因数——1和他本身,也就是说,我们判断一个数的因数个数,如果只有2个,就是质数。所以我们就把判断质数的算法转换成了统计因数个数的算法。

质数算法详解_第1张图片

这是根据质数的基本概念写出来的代码,是理解质数算法的基础。

质数算法的优化

上面的代码有很多优化的地方。

第一步:优化对合数的判断

首先 我们要把1和他本身这两个因数给去掉,这样我们需要统计的因数个数就从2变成了0。

质数算法详解_第2张图片

然后就可以开始最明显的一点优化: 如果不是质数 。其实从2开始找,找到第一个因数的时候,就可以知道它不是质数了。比如1000000,只要判断到2,就可以确定,所以后面的循环其实都是在浪费时间。那么针对这一点,就可以做出下面的优化:

质数算法详解_第3张图片

增加一个break,合数的判断效率就提上来了。

结合Python语法,for循环是可以写else的,所以呢我们的代码又变成了下面这样:

质数算法详解_第4张图片

第二步,减少判断质数的循环次数

合数的判断是快了,但是质数的判断还是很慢。其实我们观察一下因数的特点可以发现,一个数的因数,一定是成对出现的。比如100的因数里,2 和 50 是一对,4 和 25 是一对,10 和 10 是一对。这些因数对里,最小的那个不可能超过这个数的平方根,所以我们的代码又变成了:

质数算法详解_第5张图片

也可以改成while循环的形式:

质数算法详解_第6张图片

你get到了吗。

文章也会在CGYounger知识库里同步收录。

你可能感兴趣的:(Python,python,青少年编程,算法)