【问题标题】:Why do we check i <= sqrt(n) to find if a number is prime or not? [duplicate]为什么我们检查 i <= sqrt(n) 来确定一个数是否为素数? [复制]
【发布时间】:2020-04-13 21:40:43
【问题描述】:

我知道这个问题之前已经回答过,但我不太明白对那个问题给出的解释。

我在 HackerRank 上写了 30 天的代码,其中一个练习是检查一个数字是否为素数。不幸的是,我自己做不到,所以我在多次尝试后检查了给定的解决方案。即使在查看解决方案之后,我也无法理解其中一行:

// Check for primality using odd numbers from 3 to sqrt(n)
for(int i = 3; i <= sqrt(n); i += 2){
    // n is not prime if it is evenly divisible by some 'i' in this range
    if( n % i == 0 ){ 
        isPrime = false;
    }
}

为什么在for 循环中使用sqrt(n)

【问题讨论】:

标签: primes primality-test


【解决方案1】:

假设n 是一个合数。

然后,n = ab,其中ab 都在1n 之间。

如果a &gt; sqrt(n)b &gt; sqrt(n),那么这意味着ab &gt; sqrt(n)*sqrt(n) 这基本上意味着ab &gt; n,这与ab = n 的假设相矛盾。

因此,任一因子(ab)必须小于 sqrt(n),或两者都等于它。所以如果n 是复合的,n 必须有一个素因数p &lt;= sqrt(n)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 2014-02-18
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多