RUNOOB python练习题 14

本文介绍了一道Python练习题,目标是将正整数分解为质因数。通过递归实现,首先判断质数,然后对非质因数继续分解,直至所有因数都是质因数。例如,90会分解为90=2*3*3*5。
摘要由CSDN通过智能技术生成

用来练手的python 练习题其十四,原链接 : python练习实例14

题干 : 将一个正整数分解质因数。例如:输入90,打印出90=233*5。

拿到题目,我们就可以看出,首先我们需要一个函数来判断某一正整数是否为质数,然后还需要一个函数来分解质因数。显然,找到正整数的其中一个质因数是很简单的,但到这一步还不能帮助我们找到正整数全部的质因数。例如题干中的例子90,我们找到了第一个质因数 2 2 2 90 = 2 ∗ 45 90 = 2 * 45 90=245,那么问题就转化成了45分解质因数, 45 = 3 ∗ 15 , 15 = 3 ∗ 5 45 = 3 * 15, 15 = 3*5 45=315,15=35,直到最后,所有的因数都是质数。

显而易见,我们可以利用递归,将正整数分解质因数的问题转化为找到正整数的质因数及非质因数,并对非质因数再进行分解质因数直到所有的因数都变为了质因数,递归结束,下面为源代码:

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)

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值