【程序14】分解质因数 and 【程序19】找出完数

'''
【程序14】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
 重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码:
'''
#Python3.3.5
from sys import stdout
n = int(input("input number:\n"))
print("n = %d" % n)

for i in range(2,n + 1):    #i有可能出现合数,但却不会成为被n整除的数,因为合数i已经被分成其质数因子被n除过了。
    while n != i:
        if n % i == 0:
            stdout.write(str(i))
            stdout.write("*")
            n = n / i
        else:
            break
print("%d" % n)

'''
【程序19】题目:编程找出1000以内的所有完数。
程序分析:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.
'''
#Python3.3.5
from sys import stdout
for j in range(2,1001):         #1000以内的所有数
    k = []
    n = -1
    s = j
    for i in range(1,j):        #取出每一个数为j,判断小于j的每一个数是否为因子
            if j % i == 0:
                n += 1          #k为因子序列,n为下标
                s -= i          #s为j减去每一因子结果,若j为完全数,则最终s为0
                k.append(i)
   
    if s == 0:                  #找到完全数
        print(j,' = ',end='')
        for i in range(n):
            stdout.write(str(k[i])+' + ')
            #print(k[i],' + ',end='')           
        print(k[n])
           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值