问题描述:
寻找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 Listdef 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 timestart=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 Listdef 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 timestart=time.time()fac(500)end=time.time()print(end-start)
执行结果:
220-2840.005019664764404297
速度提升了不少,终于提交成功
总结以上是内存溢出为你收集整理的寻找n以内的亲密数对 python全部内容,希望文章能够帮你解决寻找n以内的亲密数对 python所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)