晚饭后朋友发来个问题,正好无事做,动手写了一下
若一个正整数有偶数个不同的真因子,则称该数为幸运数。如4含有2个真因子为 1 和 2 。故4是幸运数。求【2,100】之间的全部幸运数之和。
常规思路
被除数一直除以 1 2 3 ... 直到除以它自身,不过这种比较消耗资源(周知python简洁但效率不高)
getf.py
defget_Factor(x):"""n 需要求真因数的数(被除数) x
x 除数 y
rem 余数
quo 商"""
if x == 0: return[0]if x == 1: return [1]
f_list=[]for y in range(1,x):#定义y是除数
rem = x %y
quo= x //yif rem == 0:#如果x可以被y整除
if y not inf_list:
f_list.append(y)if quo not inf_list:
f_list.append(quo)continue
continue
continuef_list.sort(reverse=False)
f_list.pop()#是一个一个加进去,排个序后删除本身
returnx , f_listdefget_Luckynum(a, b):
Luckynum=[]for i in range(a,b+1):
i,f_list=get_Factor(i)if len(f_list) % 2 ==0:
Luckynum.append(i)