黑马程序员技术交流社区

标题: Python完数的代码优化 [打印本页]

作者: kaifei    时间: 2018-7-31 23:14
标题: Python完数的代码优化
本帖最后由 kaifei 于 2018-7-31 23:19 编辑

在学习期间,学到了循环,写了完数的题目如下:from time import timestart = time()
for num in range(1, 10001):   
      my_sum = 0   
      for i in range(1, num):  
           if num % i == 0:
               my_sum += i  
      if num == my_sum:   
           print(num)
end = time()
print((end-start), "秒")





进行优化后的代码:
from time import time
from math import sqrt
start = time()
for num in range(2, 10001):   
         my_sum = 1   
         for i in range(2, int(sqrt(num))+1):     
                   if num % i == 0:         
                         my_sum += i         
                         if i != num // i:      
                                my_sum += num // i
         if num == my_sum:     
                  print(num)
end = time()
print((end-start), "秒")

可以看到优化后的代码,运行时间仅为未优化的代码的1.3%,从而提高了效率


整体代码说明:优化后的代码调用了系统的time()函数,进行计算运行时间,使用了for循环,range进行循环次数遍历,,里面目前使用了math函数里面的sqrt,是一个开平方方法,进行开放判断,因为完数只能被本身和1整除,当然1除外。使用此方法的调用减少了循环的次数,提高了运行的时间。思路:完数的判断方法就是计算1到本身之间的所有数字能不能被整除,如果不能的话则为完数,进行开方之后,缩短了循环的次数,简短了时间。











QQ图片20180731230459.png (13.92 KB, 下载次数: 15)

QQ图片20180731230459.png

123.png (19.89 KB, 下载次数: 24)

123.png

作者: 梦缠绕的时候    时间: 2018-8-13 14:53





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2