描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围: 1≤𝑛≤2×109+14 1≤n≤2×109+14
输入描述:
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例1
输入:
180
输出:
2 2 3 3 5
本题主要用到了判断一个数是否为质数,以及设置已知质数和取平方分半计算的方法提高执行效率。
from math import sqrt
def calculate(n):
if n==2 or n==3 or n==5 or n==7:
return False,0
for i in range(2,round(sqrt(n))+1):
if n%i==0:
return True,i
return False,0#没找到该数的因子,说明无法再整除
def iszhi(n):
if n==2 or n==3 or n==5 or n==7:
return True
for i in range(2,round(sqrt(n))+1):
if n%i==0:
return False
return True
num=int(input())
flag=True
resultlst=[]
while flag==True:
flag,n=calculate(num)
if n!=0 and not iszhi(num//n):
num=num//n
resultlst.append(n)
elif n!=0 and iszhi(num//n):
resultlst.append(n)
resultlst.append(num//n)
num=num//n
if len(resultlst)!=0:
for i in range(len(resultlst)-1):
print(resultlst[i],end=' ')
print(resultlst[-1])
else:#没找到
print(num)