【发布时间】: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)?
【问题讨论】:
-
您阅读的解释是什么?你到底有什么不明白的?
-
考虑一个大于平方根的数字,如果它是总数的一个因素,那么它的对应物应该是什么?然后考虑一等于平方根
-
取一些特定的 n,例如 n = 101。要确保它是素数,您必须确保它没有被 2 到 100 之间的任何数字整除。现在,如果您只检查奇数怎么办从 3 到 99?最后,如果你只检查从 3 到 9 的奇数呢?您需要检查从 11 开始的数字吗?还是说 101 是素数就足够了?
-
n除以任何因子的结果将是另一个因子。所以对于任何因素f,值n/f是另一个因素。如果f大于n的平方根,则n/f必须小于n的平方根。
标签: primes primality-test