用来练手的python 练习题其十四,原链接 : python练习实例14
题干 : 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
拿到题目,我们就可以看出,首先我们需要一个函数来判断某一正整数是否为质数,然后还需要一个函数来分解质因数。显然,找到正整数的其中一个质因数是很简单的,但到这一步还不能帮助我们找到正整数全部的质因数。例如题干中的例子90,我们找到了第一个质因数222, 90=2∗4590 = 2 * 4590=2∗45,那么问题就转化成了45分解质因数,45=3∗15,15=3∗545 = 3 * 15, 15 = 3*545=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 Falseelif i == bound_grand:return True
# 使用递归分解质因数
def find_prime_factor(num):bound_num = int(sqrt(num))# 如果num已经是质数了,递归结束if prime_number(num):print(num)returnfor 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)