Primes 为什么要检查i<;=求一个数是否为素数?
我知道这个问题以前有人回答过,但我不太理解对这个问题的解释 我在HackerRank上写了30天的代码,其中一个练习是检查一个数字是否为素数。不幸的是,我不能自己做这件事,所以我在多次尝试后检查了给定的解决方案。即使在看了解决方案之后,我也无法理解其中一行:Primes 为什么要检查i<;=求一个数是否为素数?,primes,primality-test,Primes,Primality Test,我知道这个问题以前有人回答过,但我不太理解对这个问题的解释 我在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 prim
// 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;
}
}
//使用从3到sqrt(n)的奇数检查素性
对于(inti=3;i假设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假设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。你读到的解释是什么?你到底不明白什么?考虑比平方根大的数,如果它是整数的一个因素,那么它的对应物应该是什么呢?然后考虑一下。一等于平方根,取某个特定的n,例如n=101。要确保它是素数,你必须确保它不被2到100之间的任何数字除。现在,如果你只检查3到99之间的奇数怎么办?最后,如果你只检查3到9之间的奇数怎么办?你需要检查从11开始的数字吗?或者它足够了,然后你就可以了可以说101是素数吗?将n
除以任何因子的结果将是另一个因子。因此对于任何因子f
,值n/f
是另一个因子。如果f
大于n
的平方根,那么n/f
必须小于n
的平方根。有很多重复阿斯:你读到的解释是什么?你到底不明白什么?考虑一个大于平方根的数,如果它是整数的一个因子,那么它的对应物应该是什么?然后考虑一个等于平方根的n,例如n=101。o确保它不被2到100之间的任何数字所除。现在,如果你只检查3到99之间的奇数怎么办?最后,如果你只检查3到9之间的奇数怎么办?你需要检查从11开始的数字吗?或者它足够了,你可以说101是素数吗?用任何因子除n
的结果将是另一个因子。因此对于y因子f
,值n/f
是另一个因子。如果f
大于n
的平方根,则n/f
必须小于n
的平方根。存在大量重复项:,