【问题标题】:Find minimum prime numbers which sum to a given value找到总和为给定值的最小素数
【发布时间】:2016-03-02 18:57:47
【问题描述】:

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

我已经使用sieve of eratosthens生成了一个素数数组

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

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

但我正试图找出一种除蛮力之外的方法来找到最小素数。

【问题讨论】:

  • "所以如果一个数字是偶数,我们可以直接返回 2 作为输出" - ahm,不,这是一个猜想......
  • @Meiko 好吧,它还没有被证明是错误的。所以我们可以放心地假设它是正确的。 :)
  • @Meiko Goldbach 的猜想已被验证可支持 4 x 10^16,因此取决于 Leo 正在做什么(例如仅使用 32 位数字),返回 2 可能是有意义的。跨度>

标签: primes


【解决方案1】:

虽然您的问题没有这么说,但我假设您正在寻找具有最小基数的素数集。

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

如果 n 是奇数,并且 n - 2 是素数,则 n 是素数 2 和 n 之和 - 2.

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

因此,您总能找到两个或三个素数之和为任何大于 3 的目标 n

【讨论】:

  • 是的,我明白这一点,但我想通过遍历数组而不是使用戈尔巴赫猜想来找到它。正如我在我的问题中已经说过的,奇数按降序遍历数组以找到总和完美,但不适用于偶数。与 122 的情况一样,所以我对任何其他遍历方法感到好奇。我希望我现在已经说清楚了。
  • 我想我不明白你对最小值的定义。例如,122 = 2 + 7 + 113 = 13 + 109。如果“最小”表示具有最小基数的集合,则 13 + 109 只有两个成员。如果“最小值”表示具有最小元素的集合,那么 2 + 7 + 113 的元素为 2。我猜你更喜欢 13 + 109 解决方案,这是我的算法找到的解决方案。区别似乎是我从最小的质数开始,你从最大的质数开始。
  • @user448810 — 如果他们说的是“最小素数集”而不是“最小素数”,会很清楚吗?
【解决方案2】:

试试这个! 不是一个理想的代码,但如果你想有一个可行的解决方案: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)

【讨论】:

  • 对于我的问题,给出了素数的数量,例如这里的数字是 4,如果你愿意,你可以用小于给定 Sum(D) 的素数填充素数列表
  • 我已经使用格洛巴赫猜想解决了这个问题。仍然对您的解决方案感到好奇,D 是如何得出 29 的?另外,您的解决方案是否足够通用?当我们有一个大小为 1000 的数组时,它将如何工作?你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 2016-05-27
  • 2018-11-03
相关资源
最近更新 更多