问题描述:
寻找n以内的亲密数对。
代码格式如下:
def fac(n):
...
return xxx
n = int(input()) # 此处输入由系统自动完成不需要自己输入,只要写这样一条语句即可
题目内容:
对于两个不同的整数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将A和B称为亲密数。自定义函数fac(x)计算x包括1但不包括本身的所有因子和并返回。从键盘输入整数n,调用fac()函数寻找n以内的亲密数并输出。注意每个亲密数对只输出一次,小的在前大的在后,例如220-284。
输入格式:
按提示用input()函数输入
输出格式:
按样例形式,可使用形如“print("{}-{}".format(参数1, 参数2))”输出语句进行亲密数对的输出
输入样例:
500
输出样例:
220-284
时间限制:1500ms内存限制:100000kb
# 计算给定数的所有因子
# 因子就是所有可以整除这个自然数的整数,不包括这个数自身。
def getAllFactor(n):
list=[]
if n==1:
list.append(1)
else:
for i in range(1,int(n/2)+1):
if n%i==0:
list.append(i)
return list
def fac(n):
list=[]
dict={}
for i in range(1,n):
dict["{0}".format(i)]=sum(getAllFactor(i))
for a in range(1,n-1):
for b in range(a+1,n):
sumOflistA=dict["{0}".format(a)]
sumOflistB=dict["{0}".format(b)]
if(sumOflistA==b and sumOflistB==a):
list.append("{0}-{1}".format(a,b))
return print(list)
import time
start=time.time()
fac(500)
end=time.time()
print(end-start)
执行结果:
['220-284']
0.08019304275512695
网页提交时,反馈执行时间超标,更改程序为:
# 计算给定数的所有因子
# 因子就是所有可以整除这个自然数的整数,不包括这个数自身。
def getAllFactor(n):
list=[]
if n==1:
list.append(1)
else:
for i in range(1,int(n/2)+1):
if n%i==0:
list.append(i)
return list
def fac(n):
for a in range(1,n):
b = sum(getAllFactor(a))
if b>a and b<=n and sum(getAllFactor(b)) == a:
print('{0}-{1}'.format(a,b))
import time
start=time.time()
fac(500)
end=time.time()
print(end-start)
执行结果:
220-284
0.005019664764404297
速度提升了不少,终于提交成功