素数,帮助理解平方根的使用

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】:

这是简单的算术。如果rn 的平方根,那么r * r == n。如果将r 乘以大于它的任何值,则结果将大于n。所以不可能有任何其他素数大于r

因此,在平方根之后继续循环是没有意义的,因为它永远找不到任何东西。

【讨论】:

对于循环,它是否使用根,因为没有任何可能的更高因素? 没错。我们停下来,因为我们知道我们已经找到了所有可能的根源。 太棒了,我现在明白了,感谢您花时间解释,帮了很多忙!

以上是关于素数,帮助理解平方根的使用的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们要检查素数的平方根以确定它是不是为素数?

使用BitArray判断素数

模素数平方根

平方回文素数

C语言试题四之计算并输出3到n之间所有素数的平方根之和

C:冒泡排序&判断一个数是否为素数&求平方根的迭代公式