使用N与N / 2的平方根检查N是否为素数有什么好处?

时间:2015-02-15 18:41:05

标签: algorithm math primes sieve

是否需要切断迭代来检查数字是否为素数?

离。 37是一个素数,检查到18.5(37的一半)与6.08(平方根)相比,削减了很多工作,但两者都遵循相同的原则?

对不起要问,我正在努力巩固使用数字的平方根来确定它是否为素数,并试图向其他人解释

2 个答案:

答案 0 :(得分:3)

它的作用是因为如果n可以被2整除,那么它也可以被n / 2整除,如果它不能被1整除,它也不会被另一个整除。因此,检查其中一个就足够了,2更方便检查。

相同的逻辑适用于33(缺少)可分性n / 3暗示(缺少)可分性,因此仅检查3就足够了。

同样适用于4, 5, ..., x。什么是x?它是sqrt(n),因为n / sqrt(n) = sqrt(n),所以事情将在此阈值之后重复开始。

检查并包括floor(sqrt(n))就足够了。我们可以证明这一点:

floor(sqrt(n)) <= ceil(sqrt(n))
For the "=" part, it's obvious both work.
floor(sqrt(n)) < ceil(sqrt(n)) <=> floor(sqrt(n)) + 1 = ceil(sqrt(n))

if n divisible by floor(sqrt(n)) + 1 =>
=> n divisible by n / (floor(sqrt(n)) + 1) < n / floor(sqrt(n))

由于我们检查了所有小于或等于floor(sqrt(n))的数字,我们会找到除数n / (floor(sqrt(n) + 1)),因此检查上限是没有意义的。

答案 1 :(得分:0)

平方根是首选,因为它可以显着改善大数字的执行时间。

为什么我们可以使用平方根作为限制? 如果N不是素数,我们可以将它表示为N = p1 * p2,其中p1和p2除数大于1.显然,p1或p2(或两者)都小于或等于N的平方根。所以,它是没有意义的进一步检查。

作为一个注释,确实存在更高级的检查数字的素数方法。例如:Miller-Rabin素性测试。虽然这个测试是概率性的,但通过某些设置,它可以为小于最大64位整数的所有素数生成正确的答案。

相关问题