质数算法详解

质数是什么

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

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

判断质数的基本方法

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

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

质数算法的优化

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

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

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

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

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

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

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

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

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

你get到了吗。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值