程序14
题目:将一个正整数分解质因数。例如:输入90, 打印出90=2*3*3*5 。
代码 :
def prime_number(num: int): """判断给定的数谁否是质数和1(1既不是质数,也不是合数),实际上是判断不是合数,与程序12有区别""" for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return True def count_prime_number(num1:int, num2:int): """列出给定范围内的所有质数""" list_num = [] for i in range(min(num1, num2),max(num1, num2) + 1): if prime_number(i): list_num.append(i) return list_num def main(num:int): """主程序,输出因数列表""" factor = [] #设置因数列表(全为质数) if prime_number(num): #判断给定的数是否是质数,如果是质数输出列表:[1, num] factor = [1, num] return factor else: #如果不是质数(即为合数),用短除法逐步用质数去除原数,将除数和最终的商连乘。 last_num = int(num) # 设置短除法除去前面因数后的数,开始为原数 while not (prime_number(last_num)): #如果“除去前面因数后的数”不是质数(为合数),进入循环 list_num = count_prime_number(2, num2=int(last_num ** 0.5) +1) # 找出“除去前面因数后的数”范围内的素数列表(为减少计算量较小的),并历遍该数组,找出最小的因数, # 找到后加入因数列表,更新last_num,并退出for循环 for i in list_num: if last_num % i == 0: factor.append(i) last_num = int(last_num / i) break factor.append(last_num) #将最后的质数加入因数列表 return factor if __name__ == "__main__": number = int(input('请输入正整数:')) list1 = map(str,main(number)) print(f"{number} = {" × ".join(list1)}")成果:
请输入正整数:90
90 = 2 × 3 × 3 × 5
后记:
1.先用求质数的方法(程序12),判断该数是否是质数,再列出该数范围内的质数,用短除法逐步用质数去除原数,将除数和最终的商连乘。
2.join()方法连接的为字符串列表,不能为数字列表,切记。
3.考虑1既不是质数,也不是合数
另.也可以尝试用逐步分解法,将合数拆分为质数与合数的乘积,再分解合数部分。