我是编程新手,所以请耐心等待。
我写了这段代码来找到一个数字的最大素数因子,但是当我输入十亿或更多的数字时,它并没有解决。我尝试过xrange,但我使用的是Python 3.4。有人能指出我正确的方向吗?
done = False
num = int(input("Enter a number: "))
for j in range(num,2,-1):
if (num % j) != 0:
continue
for i in range(2,j):
if (j % i) != 0:
continue
break
else: break
print(j)
答案 0 :(得分:2)
它是一种O(n ^ 2)算法。它没有似乎解决,因为它只需要很长时间。解?使用numpy。或者找一个非天真的算法,或者自己写一个。 Eratosthenes的筛子是一个很好的起点。
答案 1 :(得分:1)
由于您不熟悉编程,这是一个简单的解决方案(但要知道有更复杂的解决方案更有效)。首先请注意,您只需要检查除数的平方根之前的除数,因为如果num = a * b,则一个小于平方根,一个大于。其次,你只需要检查素数除数。
您可以按如下方式生成素数列表:
import math
import itertools
def primes_generator():
"""Generator for the infinite list of primes."""
primes = [2, 3]
for prime in primes:
yield prime
for c in itertools.count(5, 2):
bound = math.sqrt(c)
for p in primes:
if not (c % p):
break
if p > bound:
primes.append(c)
yield c
break
现在找到所有的主要除数:
def prime_factorization(number, primes=None):
if not primes:
primes = primes_generator()
factorization = dict()
for p in primes:
count = 0
while not (number % p):
number = number / p
count = count + 1
if count:
factorization[p] = count
if number == 1:
return factorization
最大的除数是字典中最大的关键。这些函数应该适用于相当大的输入。在我的机器上,以下需要0.06秒。
print(max(prime_factorization(1000000001).keys()))