A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kaifei 初级黑马   /  2018-7-31 23:14  /  2021 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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, 下载次数: 17)

QQ图片20180731230459.png

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

123.png

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马