素数,帮助理解平方根的使用
Posted
技术标签:
【中文标题】素数,帮助理解平方根的使用【英文标题】:Prime factors, help understand the use of square root 【发布时间】:2020-10-14 01:45:09 【问题描述】:按照 geeks for geeks 网站上给出的寻找素数的解决方案,我并不真正理解他们为什么在第 16 行使用 n 的平方根(for i in range(3,int(math.sqrt(n) )+1,2):)
https://www.geeksforgeeks.org/print-all-prime-factors-of-a-given-number/
# Python program to print prime factors
import math
# A function to print all prime factors of
# a given number n
def primeFactors(n):
# Print the number of two's that divide n
while n % 2 == 0:
print 2,
n = n / 2
# n must be odd at this point
# so a skip of 2 ( i = i + 2) can be used
for i in range(3,int(math.sqrt(n))+1,2):
# while i divides n , print i ad divide n
while n % i== 0:
print i,
n = n / i
# Condition if n is a prime
# number greater than 2
if n > 2:
print n
如果有人能理解下面给出的反例,这就是我无法理解的逻辑。
每个合数至少有一个质因数小于或等于其自身的平方根。 这个性质可以用 counter 语句来证明。设 a 和 b 是 n 的两个因数,使得 a*b = n。如果两者都大于√n,则a.b > √n,*√n,这与“a * b = n”的表达式相矛盾。
【问题讨论】:
还有一个不使用 geeksforgeeks 的理由……那段文字写得很糟糕…… 【参考方案1】:这是简单的算术。如果r
是n
的平方根,那么r * r == n
。如果将r
乘以大于它的任何值,则结果将大于n
。所以不可能有任何其他素数大于r
。
因此,在平方根之后继续循环是没有意义的,因为它永远找不到任何东西。
【讨论】:
对于循环,它是否使用根,因为没有任何可能的更高因素? 没错。我们停下来,因为我们知道我们已经找到了所有可能的根源。 太棒了,我现在明白了,感谢您花时间解释,帮了很多忙!以上是关于素数,帮助理解平方根的使用的主要内容,如果未能解决你的问题,请参考以下文章