鱼C论坛

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

完数的真因子和式help

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

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

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

x
输入正整数n,如果是完数,则输出n的真因子和式。否则输出0.(正整数n的全部真因子之和等于n,则叫做完数)
例:输入:28
      输出:28=1+2+4+7+14
我只会一半,后面的输出怎么搞啊?
  1. num=2
  2. while num<1000:
  3.     A=0
  4.     n=1
  5.     while n<num:
  6.         if num%n==0:
  7.             A+=n
  8.         n+=1
  9.     if A==num:
  10.         print(A)
  11.     num+=1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 23:11:49 | 显示全部楼层
输入n 求n是不是完数
先判断它是不是完数,是的话就输出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你这代码是算1000以内的完数呀,知道怎么算完数,分解就简单了:
  1. num=2
  2. while num<1000:
  3.     b=[]
  4.     A=0
  5.     n=1
  6.     while n<num:
  7.         if num%n==0:
  8.             b.append(str(n))  #把因子转为字符加入到列表b
  9.             A+=n
  10.         n+=1
  11.     if A==num:
  12.         print('%d = %s' % (A,'+'.join(b)))       #打印出公式
  13.     num+=1
复制代码

代码优化:
  1. for num in range(2,1000):
  2.     b=['1']
  3.     A=1
  4.     for n in range(2,num//2+1):
  5.         if num%n==0:
  6.             b.append(str(n))
  7.             A+=n
  8.     if A==num:
  9.         print('%d = %s' % (A,'+'.join(b)))
复制代码


还是按题目要求写吧:
  1. num=int(input('输入一个整数:'))
  2. b=['1']
  3. A=1
  4. for n in range(2,num//2+1):
  5.     if num%n==0:
  6.         b.append(str(n))
  7.         A+=n
  8. if A==num:
  9.     print('%d = %s' % (A,'+'.join(b)))
  10. else:
  11.     print(0)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 09:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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