【问题标题】:What are the advantages of checking if N is a prime number using square root of N versus N/2?使用 N 的平方根与 N/2 检查 N 是否为质数有什么好处?
【发布时间】:2015-02-15 18:41:05
【问题描述】:

检查一个数是否为素数是否需要删减迭代?

例如。 37 是素数,检查 18.5(37 的一半)与 6.08(平方根)会减少很多工作,但两者都遵循相同的原则?

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

【问题讨论】:

标签: algorithm math primes sieve


【解决方案1】:

之所以有效,是因为如果n 可以被 2 整除,那么它也可以被n / 2 整除,如果它不能被一个整除,那么它也不能被另一个整除。所以查一个就够了,2查起来更方便。

同样的逻辑适用于33 的(缺乏)可分性意味着n / 3 的(缺乏)可分性,因此只检查3 就足够了。

这同样适用于4, 5, ..., xx 是什么?是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)),因此检查上限没有意义。

【讨论】:

  • 我想你的意思是:如果 n 可以被 floor(sqrt(n)) + 1 整除,那么 n 可以被 n / (floor(sqrt(n)) + 1) 整除,即是
  • @thang,对,我不知道x 是怎么挤进去的,谢谢。我认为我们不需要&lt;=
【解决方案2】:

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

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

请注意,确实存在更高级的检查素数的方法。例如:米勒-拉宾素性检验。虽然此测试是概率性的,但通过某些设置,它可以为小于最大 64 位整数的所有素数生成正确答案。

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 2011-11-16
    • 2013-05-15
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    相关资源
    最近更新 更多