题解 | #完全数计算#
循环除到平方根的整数部分即可,因为如果到平方根都没找到约数那说明它本身是质数,如: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)