【发布时间】:2018-10-24 05:40:11
【问题描述】:
所以,只是为了好玩,我想亲眼看看我们发现的最大素数(2^277,232,917 - 1 根据this),它是一个 23,249,425 位的数字。好家伙。所以我开始手动计算 Python 中的数字:2**277232917-1 这会给我一个答案……最终……总有一天。在我的一个核心一直受到限制的情况下等待了半小时后,我开始寻找一种更快的解决方案来解决指数问题。我在被称为
平方求幂
def exp_by_squaring(x, n):
if n<0:
return exp_by_squaring(1 / x, -n)
elif x==0:
return 1
elif x==1:
return x
elif n%2==0:
return exp_by_squaring(x * x, n / 2)
elif not n%2==0:
return x * exp_by_squaring(x * x, (n - 1) / 2)
将其插入 python3 控制台并输入t=exp_by_squaring(2, 277232917)-1 并等待...哦,等待完成!我喜欢这个概念。现在有了这个号码,我可以print(str(t)),它又被冻结了。假设我可以让它在一夜之间写入文件f=open("LargestPrime", "w") f.write(str(t)) f.close()。第二天早上用一个 23.2 MB 文本文件,试图打开它只是冻结并再次限制核心。我想它太多了,甚至无法显示。
您将如何实现这一目标?您能否将int 拆分为单独的部分,然后将它们转换为字符串以将它们写入单独的文件?我会以其他格式保存它吗?我怎样才能缩短将这个 23M+ 数字 int 转换为字符串所需的时间?我怎么能实际显示这么大的数字?我在这里完全错过了什么吗?
【问题讨论】:
-
顺便说一句,
math.log(2**277232917-1,10)约为 83,455,424,因此所讨论的数字有那么多十进制数字。计算数字不需要时间;转换为字符串需要很长时间。所以,主要问题是:你为什么想要这个数字的字符串表示? -
@DYZ 所以,只是为了好玩,我想看看我们发现的最大素数
-
@DYZ 因为我认为看到迄今为止已知的最大的已知素数在所有它的不切实际但令人印象深刻的荣耀中将是惊人的。此外,显然还有一场比赛,要找到一个超过 1 亿位数的素数,并获得 150,000 美元的奖励。不要认为我可以很快做到这一点,但我发现了很多很酷的东西,例如平方概念和模幂运算以及 Lucas-Lehmer 素数检验以及梅森素数是什么。不要以为我会真正深入了解这些在 MAT 154 中真正存在的东西,但在未来的池塘里让我的脚有点湿也无妨。
标签: python string int largenumber