这是一道很老的题了,面试时很有可能回遇到。我整理了一下思路,于是有了下面的代码:
# -*- coding: UTF-8 -*-
def prime_Factor(n):
n = int(n)
for i in range(2, n//2+1): #由于最小的质数是2,所以最大的遍历次数是一半就行了,为了保证遍历到最后一个元素要 +1
if n % i == 0:
l.append(i) #笔者认为一个数除去1和它本身外,一定能被2,3,5,7,13,17...等其中一个或多个质数整除,所以i就是质因数。
return prime_Factor(n/i) #递归调用函数,传入原数除以第一个质因数的商,以此类推
l.append(n) #最后一个质因数,因为range范围 n//2 + 1的限制,最后一个质因数,你无法取到,所以,最后要添加上
return l
if __name__ == "__main__":
n = input('please input a number:')
l = []
L = prime_Factor(n)
st = str(n)+'='
for i in L:
st = st + str(i) + 'x'
print(st[:-1])
笔试题里往往是这样写的:请写代码分解质因数,如输入90,打印输出:90=2x3x3x5
哈,你找出质因数还不行,还得是那种输出格式,呵呵。。。
笔者的思路是:
1.创建一个空列表,用于存放找出来的质因数,方便打印要求的格式。
2.定义函数prime_Factor(n),找到所有质因数,append到列表中,对于代码部分,看注释。
3.遍历列表,拼接字符串,由于最后一个数字也拼了一个 ‘x’ ,所以打印输出的时候可以用切片的方式去除最后一个‘x’。
如果不切片,会变成90=2x3x3x5x 这样,笔者没想到其他方法。有其他方法的大佬,有幸看到我的博客,望告诉小弟啊。