python-3.x 素数和[闭]

mznpcxlj  于 2022-12-30  发布在  Python
关注(0)|答案(1)|浏览(130)

9小时前关门了。
Improve this question
我有一个练习:
编写一个程序,从输入中获取数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)
gzszwxb4

gzszwxb41#

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

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]是一个解,因此我们追加它。
1.我们递归地调用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]]

相关问题