如何将一个数表示为4个素数之和?
这是问题(四个素数的求和)指出:
输入每行包含一个整数 N (N<=10000000)。这是您必须将其表示为四个素数之和的数字
示例输入:
24
36
46示例输出:
3 11 3 7
3 7 13 13
11 11 17 7
我第一眼就想到了这个想法
- 查找 N 下面的所有素数
- 查找列表的长度 (.length = 4) 与整数分区问题 (Knapsack)
但复杂性非常糟糕对于这个算法我认为。这个问题也看起来像Goldbach's_conjecture 更多的。我该如何解决这个问题?
Here is the problem (Summation of Four Primes) states that :
The input contains one integer number N (N<=10000000) in every line. This is the number you will have to express as a summation of four primes
Sample Input:
24
36
46Sample Output:
3 11 3 7
3
7 13 13
11 11 17 7
This idea comes to my mind at a first glance
- Find all primes below N
- Find length of list (.length = 4) with Integer Partition problem (Knapsack)
but complexity is very bad for this algorithm I think. This problem also looks like Goldbach's_conjecture
more. How can I solve this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个问题有一个简单的技巧。
您可以将所有数字表示为 3+2 +“两个素数之和”
或者
2 + 2 + “两个素数的和”
取决于数字的奇偶性。
对于“两个素数的和”,使用哥德巴赫猜想。
This problem has a simple trick.
You can express all numbers as 3+2 + "summation of two primes"
or
2 + 2 + "summation of two primes"
depending on parity of the number.
for the "summation of two primes", use Goldbach's Conjecture.
1000万以下的素数大约有70万个。
如果该数字是偶数,则从它减少 2 x 2,如果是奇数,则从它减少 2 + 3,并且由于哥德巴赫猜想,找到其他两个素数并不困难。
There are around 700 thousand primes below 10 million.
If the number is even reduce 2 x 2 from it and if odd reduce 2 + 3 from it and finding the other two primes is not difficult because of Goldbach conjecture.
您可以通过以下代码来实现它,通过将数字设置为常量 2 & 可以节省程序中的大量时间。 2 或 2 & 3:
You can implement it by the following code it save a lot of time in your program by make to digit as constant 2 & 2 or 2 & 3 :