python每日打卡題012質因子

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容