亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數字分解。

數字分解。

楊__羊羊 2021-08-14 13:42:24
任務是編寫將數字折疊為質因數的函數。根據給定的數字“n”,此函數應返回元組列表p_i,c^i,例如,如果輸入為 100,則輸出為 (2,2),(5,2)。所以,這是我嘗試編寫它的方式:def factor(n):c = 1pre_ans = list()temp_n=nfor i in range(2,temp_n+1):    if (is_prime(i) == True) and (temp_n % i == 0):        for j in range (2,temp_n+1):            if (temp_n % (i ** j) == 0):                pre_ans.append((i,j))                temp_n /= (i **j)        pre_ans.append((i,c))        temp_n /= iprint(pre_ans)它工作錯誤,但我找不到錯誤:(
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

修復了代碼。這是工作版本


def factor(n):

c = 1

pre_ans = list()

temp_n=n

for i in range(2, n // 2 + 1):

    if (is_prime(i) == True):

        k = 1

        while temp_n % (i ** k) == 0:

            if temp_n % (i ** (k + 1)) == 0:

                k += 1

            else:

                k += 1

                break

        if k > 1:

            pre_ans.append((i, k - 1))

return pre_ans


查看完整回答
反對 回復 2021-08-14
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

你的總體思路是可以的。但是,您的代碼的以下部分存在一些小問題:


for j in range (2,temp_n+1):

    if (temp_n % (i ** j) == 0):

        pre_ans.append((i,j))

        temp_n /= (i **j)

pre_ans.append((i,c))

temp_n /= i

事實上,主要問題是您需要在此語句的另一個方向上進行迭代for j in range (2,temp_n+1)。如果你像這樣重寫它


def factor(n):

    c = 1

    pre_ans = list()

    temp_n=n

    for i in range(2,temp_n+1):

        if (is_prime(i) == True) and (temp_n % i == 0):

            for j in range (temp_n+1, 0,-1):

                if (temp_n % (i ** j) == 0):

                    pre_ans.append((i,j))

                    temp_n /= (i **j)

    print(pre_ans)

它會起作用。整個代碼也可以寫得更短一些:


from collections import Counter


def factor(n):

    lst = []

    for i in range(2, n+1):

        while n % i == 0:

            lst.append(i)

            n = n / i

    return Counter(lst).items()


print(factor(100))


查看完整回答
反對 回復 2021-08-14
  • 2 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號