1 #题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。


代码:

  2 import pdb
  3 tmp = int(input('请输入一个正整数:'))
  4 print('%d='%tmp,end = '')
  5 
  6 i = 2
  7 li = []
  8 #pdb.set_trace()
  9 while i > 1:
 10     if tmp%i == 0:
 11         tmp = tmp/i
 12         li.append(i)
 13         i = 1
 14         if tmp == 1:
 15             i = 0
 16     i += 1
 17 for x in li[:len(li)-1]:
 18     print('%d*'%x,end='')
 19 print(li[-1])
~


运行结果:

[root@HK code_100]# python code_14.py 
请输入一个正整数:1000
1000=2*2*2*5*5*5
[root@HK code_100]# python code_14.py 
请输入一个正整数:69873
69873=3*23291
[root@HK code_100]# python code_14.py 
请输入一个正整数:208628064
208628064=2*2*2*2*2*3*3*724403
[root@HK code_100]# python code_14.py 
请输入一个正整数:90
90=2*3*3*5
[root@HK code_100]# python code_14.py 
请输入一个正整数:879236872432
879236872432=2*2*2*2*17099*3213773
[root@HK code_100]#


代码解释:


  2 import pdb
  3 tmp = int(input('请输入一个正整数:'))    #接收输入数字,并转换成int模式
  4 print('%d='%tmp,end = '')                 #格式化输出
  5 
  6 i = 2                                    #求质数从2开始除
  7 li = []                                    #定义一个空的列表
  8 #pdb.set_trace()
  9 while i > 1:                              #开启while循环
 10     if tmp%i == 0:                        #这个数字从2开始做除法,如果余数为0说明,这个数就是tmp的质数
 11         tmp = tmp/i                        #tmp相应的获取除以后的值
 12         li.append(i)                        #将可以把tmp整除的数添加到列表li[]
 13         i = 1                            #当有一个数字可以整除tmp时,将i重置重新开始循环
 14         if tmp == 1:                    #当tmp被除等于1时,说明tmp被除尽
 15             i = 0                        #通过赋值i=0,结束while循环
 16     i += 1                            #每次计算后,i+1,依次进行除法测试,从2开始向后除,能够取到的数字应该都是质数,比方说,在除以4之前,一定可以被2整除,所以不会出现被非质数进行除的情况
 17 for x in li[:len(li)-1]:                #遍历这个li列表的前n-1个数
 18     print('%d*'%x,end='')                #格式化输出这n-1个数
 19 print(li[-1])                        #格式化输出li的最后一个数,最后三行代码主要是要达到题目中li列表所有元素相乘的格式
~