Primes 为什么要检查i<;=求一个数是否为素数?

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

我知道这个问题以前有人回答过,但我不太理解对这个问题的解释

我在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;
    }
}
//使用从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
的平方根。存在大量重复项:,