挑戰每日打卡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)}")