【发布时间】:2015-01-23 01:24:52
【问题描述】:
正在尝试解决这个问题:
对于一个正数 n,将 S(n) 定义为整数 x 之和,其中
1 < x < n和x^3 ≡ 1 mod n。
n=91时,x有8个可能的值,分别是:9、16、22、29、53、74、79、81。 因此,S(91)=9+16+22+29+53+74+79+81=363。找到 S(13082761331670030)。
当然,我的代码适用于 S(91),当尝试查找 S(13082761331670030) 时,我得到两个不同的错误。
这是我的代码:
def modcube(n):
results = []
for k in range(1,n):
if k**3%n==1:
results.append(k)
return results
这会产生Overflow error: range has too many items. 当我尝试使用“xrange”而不是“range”时,我收到一条错误消息,指出 python int 太大而无法转换为 c long。我也刚刚尝试了其他几件事,但没有成功。
谁能指出我正确的方向,而不告诉我具体如何解决它?
请不要剧透。我已经做了两天了,我的下一个选择是尝试在 Java 中实现它,因为我是 Python 新手。
【问题讨论】:
-
这可能会有所帮助。您遇到的错误是数字太大而无法存储在静态类型中的结果。 stackoverflow.com/questions/1386604/… 。希望这是您正在寻找的详细程度。
-
13 万亿真的很大。我建议您通过寻找数学模式来寻找一种更有效的方法来编写您的解决方案;)
-
您将无法使用蛮力解决此问题。如果您以某种方式设法每秒处理一万亿个数字,则需要三个小时。