挑战每日打卡python基础题
come with me !今日练习:找出一个自然数的所有质因子
方案一:
#输入一个正整数,输出它的所有质数 比如 180 = 2*5*3*3*2
a = int(input("请输入一个自然数:"))
y = 2
list = []
while a != y: # 当a =1,进入无限循环中
if a%y == 0: # 转为浮点型了
list.append(y)
a /= y #a变小
else:
y += 1
list.append(int(a))
print(list)
优化一:while a != y: # 当a =1,进入无限循环中
优化二:while y <= n: 升级为 while y**y <= n: #具体见上一篇 python每日打卡题011素数升级版
优化三:首先判断输入的数是大于0的自然数,再对自然数中的偶数、奇数区分后求质因子
def prime_factors(n):
factors = []
# 检查偶数因子
while n % 2 == 0: # 除2以外,所有的偶数都有因子
factors.append(2)
n = n //2
# 检查奇数因子
y = 3
while y**y <= n:
while n % y == 0:
factors.append(y)
n = n // y
y += 2 #如果一个数能被最小的质因数 3,5,7整除,再进行循环
# 如果n是大于2的质数
if n > 2:
factors.append(n)
return factors
n = int(input("请输入一个自然数:"))
if n < 1:
print("请输入一个大于0的自然数。")
else:
print(f"{n}的质因子是:{prime_factors(n)}")









网友评论