Python练习2024.02.05

洛谷(仅用于个人学习)

# 求正整数 2 和 n 之间的完全数

## 题目描述

求正整数 $2$ 和 $n$ 之间的完全数(一行一个数)。

完全数:对于一个自然数,所有比它小的所有因数之和,等于它本身,它就是个完全数。如 $6=1+2+3$。

## 输入格式

输入 $n(n \le 10000)$。

## 输出格式

一行一个数,按由小到大的顺序。

一开始想复杂了,写了下面这么一大串,虽然可以实现,但是测试点里面最后一个测试点Time Limit Exceeded.

def allnum(n):
    if n<=2:
        return None
    else:
        L=[]
        for i in range(1,n):
            if n%i==0 and i<n:
                L.append(i)
        if n==sum(L):
            return n

n=int(input())
s=[]
for i in range(3,n):
    s.append(i)
for i in s:
   if allnum(i)!=None:
       print(allnum(i))

后面看了下别人写的,下面这个就可以AC了。

n=int(input())
for i in range(2,n+1):
    sum=1
    for j in range(2,int(i**0.5)+1):
        if i%j==0:
            sum += j
            if j!=i//j:
                sum += i//j
    if sum==i:
        print(i)

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值