# 题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
方法一:利用列表append方法添加因数;
1 num = int(input("请输入一个合数:")) 2 n = num 3 list1 = [] 4 5 for i in range(int(n/2)+1): 6 # range对象只能是正整数,n/2可能产生小数 7 # 循环次数:n最大的因子是本身(质数),最小的因子是2, 8 # 所以最大循环次数n/2即可 9 for j in range(2,n): 10 if num%j == 0: 11 list1.append(j) 12 num = num//j 13 break 14 ''' 15 for j in range(2,n): 16 # 如果j能被整除,则j是一个因子,但如果j能被整除多次,但只会记录一次; 17 if num%j == 0: 18 list1.append(j) 19 num = num//j 20 continue 21 ''' 22 if len(list1)==0: 23 print("此数是质数,请重新输入另一个数。") 24 exit() 25 print(list1) 26 print('%d='%n,end='') 27 for k in range(len(list1)): 28 if k == len(list1)-1: 29 print('%s'%list1[k]) 30 else: 31 print('%s*'%list1[k],end='')
方法二:利用format方法添加因数;
1 def reduceNum(n): 2 print('{}='.format(n),end='') 3 if not isinstance(n,int) or n<=0: 4 # isinstance判断数据n是否为int数据类型; 5 print('请输入一个正确的数字!') 6 exit(0) 7 elif n in [1]: 8 print('{}'.format(n)) 9 while n not in [1]: 10 for i in range(2,int(n+1)): 11 if n%i==0: 12 n/=i 13 if n==1: 14 print(i) 15 else: 16 print('{}*'.format(i),end='') 17 break 18 19 #reduceNum(-90) 20 reduceNum(1)
参见菜鸟教程:https://www.runoob.com/python/python-exercise-example14.html