【发布时间】:2014-03-08 05:24:10
【问题描述】:
我正在尝试使用 Python 找到给定数字 (600851475143) 的最大素数。我编写了以下代码,但问题是,它需要很长时间,可能是因为它正在迭代列表数百万次。如何优化这个过程?
def factors(n):
list = []
i = 1
while i < n:
if n % i == 0:
list.append(i)
i += 1
return list
def prime(n):
list = factors(n)
primelist = []
for item in list[1:]:
if item % 2 != 0 and item % 3 != 0 and item % 4 != 0 and item \
% 5 != 0 and item % 6 != 0 and item % 7 != 0 and item % 8 != 0 \
and item % 9 != 0:
primelist.append(item)
return primelist
def greatestprime(n):
list = prime(n)
list[0] = lnum
i = 1
while i < len(list):
if list[i] > lnum:
lnum = list[i]
return lnum
#print(greatestprime(600851475143))
【问题讨论】:
-
(Prime) 分解是一个非常困难的问题。这需要很长时间是正常的,特别是因为您首先要找到所有因子然后过滤掉素数(而且素数检查也是一个非常困难的问题)。话虽如此,您的质数检查不正确;您只检查因子 2-9,这根本不符合素数的定义。
-
@poke。实际上找出一个数字是否是素数实际上是一个比因式分解更容易的问题。 RSA 加密的安全性取决于这一事实。 en.wikipedia.org/wiki/RSA_(cryptosystem)
标签: list python-3.x primes prime-factoring