原题解答
本次的题目如下所示:
编程实现
将一个合数分解成若干个质数的乘积。输入一个正整数,请编程将合数分解成若干个质因数的乘积。如果输入的数是质数,则输出“None”,代表无法进行质因数分解。
输入描述:一个正整数
输出描述:分解的质因数,以空格隔开。无法分解质因数则输出“None”
输入样例:90
输出样例:2 3 3 5
输入样例:7
输出样例:None
这道题我们可以看出,因为涉及到需要找出所有的质因数,那我们首先要从质数中寻找因数。很明显我们还要用到前面的判断质数的函数。
从输出样例我们可以看出,分解质因数的过程中,我们会从最小的质数开始分解,因此2这个数字在题目中是一个非常特殊的数字。我们从2开始除,如果能够整除,下一轮继续除以2。当不能被2整除时,我们需要增加因子,增加以后的数字既要是质数,又要能够被剩下的数整除,不满足条件则继续加1。一直除到1则退出循环。
题目中还提到一个要求,如果输入的数字是质数,那无法进行质因数分解,输出None。那么我们可以在循环之前直接先判断输入的数字是否为质数,如果是质数则直接输出None。
通过分析我们可以得到程序的代码如下所示:
from math import sqrt
def is_prime(n):
flag = True
for i in range(2, int(sqrt(n)) + 1):
if n % i =&