首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数因式分解

数因式分解
EN

Stack Overflow用户
提问于 2018-11-10 20:46:18
回答 2查看 98关注 0票数 1

任务是将foldes数编写成素数函数。通过给定的数字'n‘,该函数应该返回元组p_i,c^i的列表,例如,如果输入为100,则输出为(2,2),(5,2)。所以,下面是我尝试写它的方法:

代码语言:javascript
复制
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)

这是错误的,但我找不到一个错误

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-11 17:31:12

修正了密码。这是工作版本

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-11-10 20:52:45

你的大致想法是可以的。但是,您的代码的以下部分存在一些小问题:

代码语言:javascript
复制
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)中向相反的方向迭代。如果你把它重写成

代码语言:javascript
复制
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)

看起来不错。整个代码也可以编写得更短一点:

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53243241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档