让我们看看,我们想要找到1到1000之间的所有数字,它们被表示为两个质数的和。例如8= 3+5,24 = 13+11
现在,这可以在O(n^2)中通过迭代1到1000之间的质数列表来完成。
有没有办法在O(n^2).Is以内做同样的事情?有没有一种方法可以在线性时间内做到这一点?
发布于 2013-02-06 11:41:22
创建一个包含1000个布尔值的数组p。如果i是质数,则将p[i]设置为true,否则设置为false。
然后,O(N^2)算法就变得简单了:在外部循环中遍历数字k 1到1,000,然后在内部循环中遍历所有大于k的素数x,并检查是否存在一个素数使得p[k-x]为true
for k in 1..1000
for x in primes greater than k
if (p[x-k])
print k can be represented as x plus (x-k)
break我怀疑对于1000个数字because computer-aided verification currently proceeds at a rather slow speeds的O(N)的总运行时间,可以在恒定的时间内执行检查。
发布于 2013-02-06 11:28:32
对于我们现在知道的所有偶数,它们可以表示为2个质数的和(参见Goldbach's conjecture)。
对于所有的奇数,如果它可以表示为2个素数的和,那么其中一个一定是2,另一个应该是奇素数。
所以总数应该是(1000/2 - 1) +(素数计数从3到997),
其中,
(1000/2 - 1)是系列4、6、8、10的总数...
(质数从3到997)是系列5(2+3)、7(2+5)、9(2+7)、13(2+11)的总数...
发布于 2017-04-14 08:57:44
1!1是一个很好的公式。第一个是1000 +1除以5x + 38。这是根据ATF定理。试试这个,你就会得到答案。
https://stackoverflow.com/questions/14720904
复制相似问题