#35822: python


chiren0000@gmail.com (relxis)

學校 : 不指定學校
編號 : 236030
來源 : [1.173.208.60]
最後登入時間 :
2023-06-18 22:40:35
a010. 因數分解 | From: [1.173.208.60] | 發表日期 : 2023-06-18 17:47

def count_nums(list, value): #在list中計算有幾個value 如果list中有2個value 輸出為value^2, 有1個value 輸出則為value 沒有value則輸出空字串
    count = list.count(value)
    if count > 1:
        return f"{value}^{count}"
    elif count == 1:
        return str(value)
    else:
        return ""


num = int(input()) 

factors = [] #定義一些變數
array = []
output = ""

for i in range(2, int(num ** 0.5 + 1)): #找到num所有的因數
    if num % i == 0:
        factors.append(i)
        if i != num // i:
            factors.append(num // i)

factors.sort()

if(factors == []): # 如果num為質數 factors為[] 直接輸出num即可
    print(num)
else: #如果num不是質數(有找到因數) 繼續進行以下步驟
    while (num != 1): # 質因數分解 比如說num = 20 最後array的結果為[2,2,5]
        for i in factors:
            if num % i == 0:
                array.append(i)
                break
        num = num / i

    for i in factors: # 把array轉換成字串 並加上題目要求的條件 例如[2,2,5]轉換為"2^2 * 5 這時候需要用到前面算出來的所有因數 factors"
        if (count_nums(array, i) != ""):
            output = output + count_nums(array, i) + " * "

    print(output[0:-3]) #  上面輸出的output會多一個" * " 像是"2^2 * 5 * "所以把倒數3個字符移除

 
ZeroJudge Forum