我想获得区间[min, max]
中的所有素数。我想在n
服务器上做微积分。将另一个n
间隔中的初始间隔分开,以便在所有n
服务器中管理大致相同的负载的最佳方法是?通过线程获取素数。如何划分间隔?
[可选]
我有一个想法,但它没有工作,因为我的预期。我假设所有的数字都是素数,所以i
的代码成本是i
,验证的指令是素数。
如果我们记住这个方法:
然后,指令数来获得质数在区间[1100]为1+2+..+99+100 = 100(1+100)/2 = 5050
。现在,如果我想在2个服务器(n=2
)中执行这个微积分,我必须将这个负载分配给每个(每个指令2525条指令)。我想要的时间间隔由2525 = x(1+x)/2 -> x=71
定义。
一般而言,通式为Load = (Interval(x) - Interval(x-1) + 1) * (Interval(x-1) + Interval(x))/2
,即Load = (max - min + 1) * (min + max)/(2 * n)
。
这样做,与x and y = [1:9999999]
和n = 16
,我有这样的结果:
http://s2.subirimagenes.com/imagen/previo/thump_948211012c6a4f9423d5b03819d.png
我不明白在所有服务器的同一时间和说明,是什么意思,这不是来划分间隔的方式。
任何想法?
是不是比编程问题更像一个数学? – zapl
是的。仍然知识和好奇心:D –
此外,这是纯粹的数学(可能有更好的网站来问这样的问题)...我有一些直觉认为你的基本假设不起作用:你不能假设素数是均匀的分散式。素数较大的数字比较小的素数不太可能。所以,当你创建相同大小的区间时,它们将包含(显着?!)不同数量的素数。 – GhostCat