目录
一、题目描述
二、思路
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_numelse: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整除iprime_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)