无论如何,要加快这段代码的速度,因为在python 3.8上运行大约需要3-4个小时


import random
class myClass:


def amicableNumbers(self):
sum1=0
sum2=0
num1=1
num2=1
z= 2*(10**7956785)
zz= z+100000000
while (sum1 != num2 and sum2 != num1):
num1,num2= random.randint(z,zz), random.randint(z,zz)
for i in range(1,num1):
if(num1 % i == 0):
sum1+=i
for i in range(1,num2):
if(num2 % i == 0):
sum2+=i

if(sum1 == num2 and sum2 == num1):
print(num1,'and',num2,"are Amicable Numbers")
else: 
sum1=0
sum2=0

def main():       

obj1=myClass()
obj1.amicableNumbers()


if "__main__" :
main()

我以前问过这个问题,但比以前需要更多的阐述。这些建议的大意是"你检查过它是否真的会是真的吗"。我检查过了。

您正在处理一些非常大的数字。我认为当for循环运行这么多迭代时,它总是会有点慢。只是做这个计算:

z=2*(10**7956785)

当我运行它时,花了大约6秒。

这里有一个答案,他们避免了嵌套循环。然而,他们使用的是较小的数字。我也会查看这个指南,其中显示了不同的算法。

我本想把这个作为评论发布的,但我的声誉还不够高。

最新更新