【发布时间】:2010-03-08 18:12:27
【问题描述】:
我正在用 python 模拟我的加密方案,我是它的新用户。
p = 512 位数,我需要为其计算最大素数,我正在寻找两件事:
- 处理这种大型素数分解的最快代码
- 可以将 512 位数字作为输入并可以处理的代码。
我在其他语言中看到了不同的实现,我的整个代码都在 python 中,这是我卡住的最后一点。所以让我知道python中是否有任何实现。
请简单解释一下,因为我是python的新用户
抱歉英语不好。
编辑(取自以下 OP 的回答):
#!/usr/bin/env python
def highest_prime_factor(n):
if isprime(n):
return n
for x in xrange(2,n ** 0.5 + 1):
if not n % x:
return highest_prime_factor(n/x)
def isprime(n):
for x in xrange(2,n ** 0.5 + 1):
if not n % x:
return False
return True
if __name__ == "__main__":
import time
start = time.time()
print highest_prime_factor(1238162376372637826)
print time.time() - start
上面的代码对“1238162376372637826”有效(有一点延迟)但是 将其扩展到
10902610991329142436630551158108608965062811746392 57767545600484549911304430471090261099132914243663 05511581086089650628117463925776754560048454991130443047
让 python 发疯。有什么办法可以像上面一样,我可以拥有它 很快就计算出来了?
【问题讨论】:
-
512 位数字是 155 位数字,这只是一个 Python
long。不需要特殊代码。这真的没什么。当然,分解大素数的实际算法除外。你需要算法吗?到目前为止你有什么? -
嗯。您知道分解一个通用的 512 位数字是目前在合理时间内可以在单台机器上完成的工作的极限吗?以下是维基百科的引述:“截至 2007 年底,[...] 一个没有任何特殊数学经验的人可以在几个月内在几台 PC 上计算高达约 520 位的一般形式的数字。 "见:en.wikipedia.org/wiki/Integer_factorization_records
-
-1: "有什么办法可以像上面一样,让我马上计算出来吗?"问这样的问题表明你真的不清楚自己在做什么。
标签: python primes factorization