找到与给定值相加的最小素数

时间:2016-03-02 18:57:47

标签: primes

我想找到总和给定值的最小素数集,例如9 = 7 + 2(不是3 + 3 + 3)。

我已经使用sieve of eratosthens

生成了一个素数数组

我按降序遍历数组,以获得小于或等于给定数字的数组最大素数。如果数字是奇数,这很好用。 但偶数的失败,例如122 = 113 + 7 + 2但122 = 109 +13。

Golbach's Conjecture我们知道任何偶数都可以表示为两个素数的两个和。因此,如果数字是偶数,我们可以直接返回2作为输出。

但是我想找出一种除了暴力之外的方法来找到最小素数。

2 个答案:

答案 0 :(得分:8)

虽然你的问题并没有这么说,但我认为你正在寻找具有最小基数的素数集。

如果 n 是偶数,则按顺序考虑素数 p ,2,3,5,...;最终 n - p 将是素数,因此 n 是两个素数的总和。这个过程通常很快收敛,两个素数中较小的一个很少大于1000(通常比那个小得多)。

如果 n 是奇数,并且 n - 2是素数,那么 n 是质数2和 n之和 - 2。

如果 n 是奇数,并且 n - 2不是素数,则 n - 3是偶数,可以写为和两个素数,如上所述。

因此,你总能找到两个或三个素数,它们总和到任何大于3的目标 n

答案 1 :(得分:0)

试试这个! 不是理想的代码,但如果你想有一个可行的解决方案:P

primes = [2,3,5,7]
D = 29
i = -1
sum_ = 0
count = 0
while sum_ != D :
    sum_ = sum_ + primes[i]
    count += 1
    if (sum_ == D) :
        break
    elif D - sum_ == primes[i-1] :
        count += 1
        break
    elif D - sum_ < ex[i-1] and (D-sum_ not in primes) :
        sum_ = sum_ - primes[i]
        count = count - 1
        i = i - 1
print(count)