题解 | #完全数计算#

循环除到平方根的整数部分即可,因为如果到平方根都没找到约数那说明它本身是质数,如:11的平方根约是3.2,循环到3即可,4就超了,此法可防止大质数超时

import math,sys #求平方根的方法有很多,内置的pow()和**都是
for line in sys.stdin:
    n=int(line.strip())
    cnt=0
    for num in range(4,n+1):  #本解法用while也行的,就是要多写几句
        sum = 0  #sum每次要记得归零
        for j in range(2,int(math.sqrt(num))+1):#用int截断整数部分
            a,b=divmod(num,j)
            #print(a,b)
            if b==0:
             sum+=j+a #因为是除到了一半,所以要把除数和商这一对都记下
        if sum+1 == num:#求和验证,别把1给漏了
            cnt += 1
    print(cnt)
全部评论

相关推荐

11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
扭转乾坤_:现在企业都是学华为,一直通过丢池子里,最后捞
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务