'''
【程序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])