数字分解。

任务是编写将数字折叠为质因数的函数。根据给定的数字“n”,此函数应返回元组列表p_i,c^i,例如,如果输入为 100,则输出为 (2,2),(5,2)。所以,这是我尝试编写它的方式:


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 (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

print(pre_ans)

它工作错误,但我找不到错误:(


杨__羊羊
浏览 172回答 2
2回答

喵喵时光机

修复了代码。这是工作版本def factor(n):c = 1pre_ans = list()temp_n=nfor 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

繁星点点滴滴

你的总体思路是可以的。但是,您的代码的以下部分存在一些小问题: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 Counterdef 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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python