(已解决)存疑(超时)--找完数--浙大Python题目集

浙大版《Python 程序设计》题目集第4章-30 找完数 (20 分)
测试点13超时

from math import sqrt
m,n=input().split()
m=int(m)
n=int(n)
flag=False
for i in range(m,n+1):
    f1=False
    perfect=[]
    for j in range(1,i):
        if j>int(sqrt(1.0*i)) and len(perfect)==0:
            break
        if i%j==0:
            perfect.append(j)
            if sum(perfect)>i:
                break
    if sum(perfect)==i:
        flag=True
        for k in range(len(perfect)):
            if k==0:
                print('%d = %d'%(i,perfect[k]),end='')
            else:
                print(' + %d'%(perfect[k]),end='')
        print()
if flag==False:
    print('None')

已改正,循环范围至sqrt(i)即可,然后需要添加(i//j),并且需要排序,因子1是特殊值。

from math import sqrt
m,n=map(int,input().split())
flag=False
for i in range(m,n+1):
    perfect=[]
    perfect.append(1)
    for j in range(2,int(sqrt(i))+1):
        if i%j==0:
            perfect.append(j)
            if j*j!=i:
                perfect.append(i//j)
    if sum(perfect)==i:
        flag=True
        perfect.sort()
        for k in range(len(perfect)):
            if k==0:
                print('%d = %d'%(i,perfect[k]),end='')
            else:
                print(' + %d'%(perfect[k]),end='')
        print()
if flag==False:
    print('None')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值