将数字表示为素数和的方法

2024-09-28 03:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我陷入了这个问题,我想打印出所有素数求和的方法,等于给定的数字n: 这是我的代码

我的问题是,如果它是素数,我也希望在输出中有数字。 我不知道在哪里以及如何添加所需的代码。;(

我的意思是,如果n=2,它会给我一个空列表,但我想要[2]作为我的输出

n = int(input("between 2n75: "))

prime = []
for x in range(2, n+1):
    for i in range(2, x):
        if x % i == 0:
            break
    else:
        prime.append(x)
listprimes = (prime)

#n = int(input("between 2n75: "))
#print(listprimes)

def allways(n, listprimes):
    ways = [[prime] for prime in listprimes]
    new_ways = []
    collected = []

    while ways:
        for way in ways:
            s = sum(way)
            for prime in listprimes:
                if prime >= way[-1]:
                    if s + prime < n:
                        new_ways.append(way + [prime])
                    elif s + prime == n:
                        collected.append(way + [prime])


        ways = new_ways
        new_ways = []
    return collected

print(allways(n, listprimes))


Tags: 代码innewforinputif数字prime
3条回答

改变

ways = [[prime] for prime in listprimes]

ways = [[]]

请注意,您的代码可以在许多地方进行优化

试试这个

n = int(input("between 2n75: "))

prime = []
for x in range(2, n+1):
    for i in range(2, x):
        if x % i == 0:
            break
    else:
        prime.append(x)
listprimes = (prime)

#n = int(input("between 2n75: "))
#print(listprimes)

def allways(n, listprimes):
    ways = [[prime] for prime in listprimes]
    new_ways = []
    collected = []

    while ways:
        for way in ways:
            s = sum(way)
            if s == prime:
                collected.append(way)
            for prime in listprimes:
                if prime >= way[-1]:
                    if s + prime < n:
                        new_ways.append(way + [prime])
                    elif s + prime == n:
                        collected.append(way + [prime])



        ways = new_ways
        new_ways = []
    return collected

print(allways(n, listprimes))

您可以将以下两行插入到allways函数中,这两行收集类似[2]的内容

if s == n:
    collected.append(way)

例如:

def allways(n, listprimes):
    ways = [[prime] for prime in listprimes]
    new_ways = []
    collected = []

    while ways:
        for way in ways:
            s = sum(way)
            if s == n:  # insert this line
                collected.append(way)  # and this line
            for prime in listprimes:
                if prime >= way[-1]:
                    if s + prime < n:
                        new_ways.append(way + [prime])
                    elif s + prime == n:
                        collected.append(way + [prime])


        ways = new_ways
        new_ways = []
    return collected

相关问题 更多 >

    热门问题