鱼C论坛

 找回密码
 立即注册
查看: 2104|回复: 2

完数的真因子和式help

[复制链接]
发表于 2020-5-7 22:53:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入正整数n,如果是完数,则输出n的真因子和式。否则输出0.(正整数n的全部真因子之和等于n,则叫做完数)
例:输入:28
      输出:28=1+2+4+7+14
我只会一半,后面的输出怎么搞啊?
num=2
while num<1000:
    A=0
    n=1
    while n<num:
        if num%n==0:
            A+=n
        n+=1
    if A==num:
        print(A)
    num+=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 23:11:49 | 显示全部楼层
输入n 求n是不是完数
先判断它是不是完数,是的话就输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 23:16:23 | 显示全部楼层
本帖最后由 txxcat 于 2020-5-7 23:53 编辑

你这代码是算1000以内的完数呀,知道怎么算完数,分解就简单了:
num=2
while num<1000:
    b=[]
    A=0
    n=1
    while n<num:
        if num%n==0:
            b.append(str(n))  #把因子转为字符加入到列表b
            A+=n
        n+=1
    if A==num:
        print('%d = %s' % (A,'+'.join(b)))       #打印出公式
    num+=1
代码优化:
for num in range(2,1000):
    b=['1']
    A=1
    for n in range(2,num//2+1):
        if num%n==0:
            b.append(str(n))
            A+=n
    if A==num:
        print('%d = %s' % (A,'+'.join(b)))

还是按题目要求写吧:
num=int(input('输入一个整数:'))
b=['1']
A=1
for n in range(2,num//2+1):
    if num%n==0:
        b.append(str(n))
        A+=n
if A==num:
    print('%d = %s' % (A,'+'.join(b)))
else:
    print(0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 18:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表