第n小的质数c++_如何快速判断一个较大正整数是质数还是合数?

如何快速判断一个较大正整数是质数还是合数?

62e61464a85ec7ee2cfff08029a2c99e.png

如果是判断一个100以内或比较小的正整数是不是质数,我们只需要运用比较熟悉的2,3,5,7,11,13这些质数去除这个数,如果都不能整除,则该数就是质数,如果能够被其中某个质数整除,则这个数就是合数。但对于一个较大的整数判断它是合数还是质数,如何快速作出判断呢?或者说从最小的质数2开始,要判断到那个质数终止呢?

比如,899是合数还是质数?

cd38a0b10950ba1e52ec43e1e740e2db.png

我们从2开始经过验算已经确认它不能被2,3,3,7,11,13,17,19整除了,至此是否就可以下结论它是质数呢?显然是不行的,再继续验算下去,它能被29整除,即899÷29=31,所以899是合数。

显然,判断一个数是不是质数,依次从最小的质数2开始依次验算它否被这些质数整除,但问题是如果前面连续验算了许多个仍然没有出现过整除,究竟要验算到那个质数为止呢?是不是要验算到这个数本身才能得出为质数的结论?否则要验算到能否被多大的质数整除才能作出判断是质数呢?

下面先了解一下质数的一些特征:

假设所判断的整数为N,

当N<2×3时,如果N不是2的倍数,则N是质数;

当N<3×5时,如果N不是2或3的倍数,则N是质数;

当N<5×7时,如果N不是2或3或5的倍数,则N是质数;

当N<7×11时,如果N不是2或3或5或7的倍数,则N是质数;

当N<11×13时,如果N不是2或3或5或7或11的倍数,则N是质数;

一般地,当N

因此,判断一个较大的整数N是不是质数,其做法是:找到两个连续的质数a,b(a显然,对于较大的整数N,要找到两个连续的质数a、b,使得N2所以可用[√N]([√N]表示不超过√N的最大整数)替代a。

例如,判断2011是质数还是合数?

因为[√2011]=44,所以要判断2011是不是质数,只需要验证2011能否被小于44的某个质数整除就可以了,完全没必要验证到2011.

也就是说,最多只需要判断2011能否被43,41,37,31,29,23,19,17,13,11,7,5,3,2这些数中的某一个整除即可。

由于2011都不能被这些质数整除,所以2011是质数。

0f14c6219c25917f08078448eb9313bc.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值