当我输入大量数字时,为什么我的简单代码要花那么多时间执行?

时间:2020-08-18 17:26:19

标签: python-3.x time-complexity

我写了一个简单的代码来打印Euler项目中给定数的最大素数。对于24之类的数字来说,它工作得很好,但是对于大型数字,python shell没有任何响应!

a=600851475143
b=[]
for i in range(2,600851475143):
    if a%i==0:
         if i==2:
            b.append(i)
            continue
         for j in range(2,i+1):
             if j==i:
                b.append(i)
             if i%j==0:
                break
 print(max(b))
 print(b)

1 个答案:

答案 0 :(得分:0)

您可以使用类似的算法来获取大质数因子:

import math

def LLL(N):
   p = 1<<N.bit_length()-1
   if N == 2:
     return 2
   if N == 3:
     return 3
   s = 4
   M = pow(p, 2) - 1
   for x in range (1, 100000):
     s = (((s * N ) - 2 )) % M
     xx = [math.gcd(s, N)] + [math.gcd(s*p+x,N) for x in range(7)] + [math.gcd(s*p-x,N) for x in range(1,7)]
     try:
        prime = min(list(filter(lambda x: x not in set([1]),xx)))
     except:
        prime = 1
     if prime == 1:
        continue
     else:
        break
   return N/prime

相关问题