用来练手的python 练习题其十四,原链接 : python练习实例14
题干 : 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
拿到题目,我们就可以看出,首先我们需要一个函数来判断某一正整数是否为质数,然后还需要一个函数来分解质因数。显然,找到正整数的其中一个质因数是很简单的,但到这一步还不能帮助我们找到正整数全部的质因数。例如题干中的例子90,我们找到了第一个质因数 2 2 2, 90 = 2 ∗ 45 90 = 2 * 45 90=2∗45,那么问题就转化成了45分解质因数, 45 = 3 ∗ 15 , 15 = 3 ∗ 5 45 = 3 * 15, 15 = 3*5 45=3∗15,15=3∗5,直到最后,所有的因数都是质数。
显而易见,我们可以利用递归,将正整数分解质因数的问题转化为找到正整数的质因数及非质因数,并对非质因数再进行分解质因数直到所有的因数都变为了质因数,递归结束,下面为源代码:
import numpy as np
from math import sqrt
# 判断是否是质数
def prime_number(num):
bound_grand = int(sqrt(num))
if num == 2 or num == 3:
return True
#在2-根号num之间如果存在num的因数,则num不是素数
for i in range(2,bound_grand+1):
if num%i == 0:
return False
elif i == bound_grand:
return True
# 使用递归分解质因数
def find_prime_factor(num):
bound_num = int(sqrt(num))
# 如果num已经是质数了,递归结束
if prime_number(num):
print(num)
return
for i in range(2, bound_num+1):
# 如果i是num的质因数
if num%i == 0 and prime_number(i):
print(i)
num = int(num/i)
# 对非质因数分解质因数
find_prime_factor(num)
break
代码包含了两个函数,一个函数用于判断某正整数是否为质数。另外一个函数使用递归调用分解质因数。
使用结果例如下:
find_prime_factor(10000)