【剑指offer】——求出一个正整数的质数因子(Python)

目录

 

一、题目描述

二、思路

1、短除法

2、平方根法


一、题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

最后一个数后面也要有空格

输入描述:

输入一个long型整数

输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1

输入

180

输出

2 2 3 3 5

二、思路

1、短除法

1)将2作为正整数的初始质数因子,

2)若正整数不能整除2,则将初始质数因子+1,重复,直到可以被整数为止,

3)若可以被整除了,将下一轮的正整数更新为上一轮正整数除以质数因子的值

4)这个方法比较容易理解,但是在面试题中容易超时,如71,是一个质数,前面70轮都是白做功夫,要是一个更大的质数则会更费时

num = int(input())
multi_num = 2
while num >= multi_num:
    if num%multi_num == 0:
        print(multi_num,end = ' ')
        num = num/multi_num
    else:
        multi_num += 1

2、平方根法

这里主要是因为涉及到一个知识点,那就是每一个正整数的质数因子都不会超过本身的算术平方根+1,这样会大大降低计算时间

关键代码:

int(num**0.5+1)

prime_num == 1

递归

num = int(input())
def f(num):
    prime_num = 1 # num为质数的标志
    for i in range(2,int(num**0.5+1)):
        if num%i == 0: # num整除i
            prime_num = 0 # num非质数
            print(i,end=' ')
            num = num//i # 更新num,接下来的工作就是找新一轮的num的质数因子
            f(num) # 递归
            break # 递归结束条件
    # 判断当前数是否为质数
    if prime_num == 1: # 若从2到int(num**0.5+1)都无法整除num,那说明num是一个质数,直接输出
        print(num,end=' ')
f(num)

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有情怀的机械男

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值