【质因数分解】对用户输入的一个大于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