在此python主要因子程序中寻找反例

时间:2018-10-09 21:34:51

标签: python primes

我拼凑了这个脚本,以吐出整数n的素数分解。在脚本的最后,我将当前的主要因素列表(包括多重性)相乘,并检查其是否等于n;如果不是,我将那个产品除以商,如果它是质数则附加商。

我已经测试了大量的数字,并且每次都有效,但是从数学上我不确定为什么。我是否应该绕过有关检查range (sqrt(n), n)中剩余质数的内容?不能有一个在这个范围内有两个素数的整数吗?如果有,我还没有找到一个例子。我是python的新手,所以另一个解释是,我不理解自己的代码,而且它以某种方式对我来说循环。

from math import sqrt
n = int(input("Let's factor a number:"))

def isPrime(x):
    for i in range(2,int(sqrt(x)+1)):
        if x%i==0:
            return False
    return True

m = int(sqrt(n)+1)
i = 1
factors = []
while(1 < m):
    if (n % (m**i) == 0 and isPrime(m) == True):
        factors.append(m)
    else:
        m -= 1
        i = 1
        continue
    i += 1

prod = 1
for i in factors:
    prod *= i

if prod == n:
    print(factors)
elif isPrime(n/prod) == True:
    factors.append(int(n/prod))
    print(factors)

1 个答案:

答案 0 :(得分:2)

不,您不需要这样的循环。 n只能有一个素数> sqrt(n)。假设相反:至少有两个。 i,j> sqrt(n)。在这种情况下,i * j必须为> sqrt(n)* sqrt(n),这是您的矛盾之处。

一旦发现所有因子均小于sqrt(n),则所有剩余金额均为质数,并且是唯一大于sqrt(n)的因子。