无论如何要加快此代码的速度,因为在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秒钟。

对此here有一个答案,他们避免了嵌套循环。但是,他们使用的数字较小。我还要查看this指南,其中显示了不同的算法。

本来可以作为评论发表,但是我的声誉还不够高。