质数之和 [已关闭]

sum of prime numbers [closed]

提问人:Elio Baharan 提问时间:12/30/2022 最后编辑:khelwoodElio Baharan 更新时间:12/30/2022 访问量:91

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

11个月前关闭。

我有一个练习:

编写一个程序,从输入中获取数字 n,并打印总和等于 n 的素数的所有情况。

例如:输入为 n = 13,输出为:

2 2 2 2 2 3
2 2 2 2 5
2 2 2 7
2 2 3 3 3
2 3 3 5
2 11
3 3 7
3 5 5
13

输出按词典法排序。

我只能编码来查找 1-n 之间的素数:

n = int(input())
lst = []
for i in range(2, n + 1):
    isPrime = True
    for j in range(2, i - 1):
        if i % j == 0:
            isPrime = False
    if isPrime:
        lst.append(i)

print(lst)
python-3.x 素数

评论

0赞 Highway of Life 12/30/2022
嗨,欢迎来到 Stack Overflow。不清楚您的问题是什么,您能否编辑问题并说明您需要帮助的内容?
0赞 Elio Baharan 12/30/2022
实际上有(第 5 行),但输出是按词典法排序的
4赞 Ulrich Eckhardt 12/30/2022
目前还不清楚你的问题是什么。你希望有人为你做功课,即为此设计一个算法吗?你知道哪些方法,哪些方法你已经放弃了?
1赞 Highway of Life 12/30/2022
你的问题仍然令人困惑,读起来好像你希望有人为你编写整个程序(为你做功课?),如果不是这种情况,请编辑帖子以更具体地回答你的问题。包括您遇到的任何错误。
1赞 Karl Knechtel 12/30/2022
欢迎来到 Stack Overflow。请阅读如何提问和如何提问和回答家庭作业问题?.我们要求问题具体有针对性。应该很清楚的是,“找出所有可能的素数组,总和为 N,并显示它们”是一个多步骤的过程。你有责任尝试确定步骤并找出你卡住的地方。

答:

-2赞 Nonlinear 12/30/2022 #1

这是我对这个问题的看法。

solution = []
primes_up_to_n = [2, 3, 5, 7, 11, 13]

def get_sums(primes, n, path):
    global solution # keep track of solutions found so far.
    if n < min(primes):
        return # no more solutions are possible at this point
    for prime in primes:
        if n == prime:
            solution.append(path+[prime])
        get_sums(primes, n-prime, path+[prime])

get_sums(primes_up_to_n , 13, [])

k = [sorted(x) for x in solution] # order the solutions
print([*map(list, {*map(tuple, k)})]) # remove the duplicates

解释:

  1. 我们检查当前 N 是否在素数列表中。如果是,则表示这是一个解决方案,因此我们附加它。path + [n]
  2. 我们递归地呼吁寻找进一步的解决方案。 这种方法的问题在于,该算法不区分 和 例如。因此,我们删除了最后两行中的此类重复项。get_sums[2, 2, 2, 2, 2, 3][2, 2, 2, 2, 3, 2]

代码输出:

[[2, 2, 2, 2, 2, 3],
[2, 2, 2, 7],
[2, 3, 3, 5],
[13],
[3, 3, 7],
[2, 2, 3, 3, 3],
[3, 5, 5],
[2, 2, 2, 2, 5],
[2, 11]]

评论

0赞 Karl Knechtel 12/30/2022
请阅读如何回答,不要简单地按照规范编写代码。像这样的问题不适合 Stack Overflow,需要解释答案中的代码。
0赞 Nonlinear 12/30/2022
@Karl Knechtel:嗯,很抱歉。我以为那个人已经试过了,但以后我会更加小心。对于解释,我编辑了我的帖子,我希望现在更清楚了。