麻烦各位大佬帮忙看看

【质因数分解】对用户输入的一个大于10的整数进行质因数分解。假设输入符合要求,程序显示该数的质因数分解结果,且各个质因数从小到大排列。

程序的一次执行过程如下图所示:

如果用户输入的是一个质数,则程序显示1乘以该数。下图是用户输入一个质数的分解结果:

程序代码如下:

#质因数分解

import math

x = int(input("请输入一个大于10的整数:"))

primes =[ ___1___  for p in range(2, x//2+1) if 0 not in[p%d for d in range(2, int(math.sqrt(p))+1)] ]

factorList = []

y = x

for i in primes:

   while y % i == 0:

       factorList.append(i) 

       y = y // i

if factorList == []:

   print("%d=%d*%d" % ___2___)

else:

   s = "*".join( map( ___3___ , factorList) ) 

   print("%d=%s" % (x,s)) 

#结束

 

def reduceNum(n):
    
    '''策略:求解n的因式分解,首先从2开始到n遍历,
    如果n%某一个数的结果是整数,则打印出该数,同时n=n/该数
    直到n==1结束
    '''
    a='{} = '.format(n)
 
    #判断n是否为正整数
    if not isinstance(n, int) or n <= 0 :
        print ('请输入一个正确的数字 !')
        exit(0)
        
    #排除n的值为1 的特殊情况   
    elif n in [1] :        
        a+='{}'.format(n)
 
    #n的值不为1的正整数   
    while n not in [1] : # 循环保证递归
        for temp in range(2, n + 1) :
            
            if n % temp == 0:#更改n的值,同时记录下它的因数并跳出for循环
                n =int( n/temp)# n 等于 n/temp
                
                if n == 1: #此时n的值大小和因数相同,作为末尾因数
                    a+=str(temp)
                    
                else : # index 一定是因数                    
                    a+='{} *'.format(temp)
                    
                break
    print(a)
            
reduceNum(999)
reduceNum(90)

参考一下,希望对你有帮助

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632