python好写,但是确实太慢
solve 1:conmmon calculate,一般解法
def perfnum(n):
if n<4:return 0
else:
pnn=0
for mm in range(4,n+1): #calculate perfact number
sum = 0
for s in range(1,mm//2+2):
if mm%s==0:sum+=s
if sum==mm:pnn+=1
return pnn
while 1:
try:
n=int(input())
print(perfnum(n))
except:breaksolve 2:create dictionary tojudge(faster),构架字典解法
#dict algorithm
def perfdict(n):
pdict={}
for i in range(1,n+1):#create unit dict
pdict[i]=1
sum=0
for i in range(2,n):
for j in range(i+1,n//i+1): #modify number dict,the dict cannot created out of length
pdict[i*j]=pdict[i*j]+i+j
for p in range(2,n+1):
if pdict[p]==p:sum+=1 #if key eqauls value,add 1 to sum
return sum
while 1:
try:
n=int(input())
print(perfdict(n))
except:breaksolve 3:enumeration algorithm #暴力枚举法
while 1:
try:
n=int(input())
print(len(list(filter(lamda x:x<=n,[6,28,496,8128]))))
except:break
京公网安备 11010502036488号