我在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;
}
}
为什么在sqrt(n)
循环中使用for
?
n
是一个复合数字。 然后,n = ab
,其中a
和b
都在1
和n
之间。
如果a > sqrt(n)
和b > sqrt(n)
,则意味着ab > sqrt(n)*sqrt(n)
基本上意味着ab > n
,这与ab = n
的假设相矛盾。
因此,至少一个因子(a
或b
)必须小于sqrt(n)
。因此,如果n
是复合的,则n
必须具有素数p<=sqrt(n)