振荡计数器增量?

时间:2013-09-04 18:20:11

标签: javascript

我想减少素数测试中的计算负荷。目前我的循环只测试赔率,如下:

for (k=3; k<=end; k+=2) {

我读到除了2和3之外的每个素数都是k = 6 +/- 1的函数。通过仅测试2/3的赔率,我可以将计算负荷降低33%。我能想到的唯一方法是使计数器振荡增加2,然后是4,然后是2,然后是每次迭代4次,例如测试5,7,11,13等。

有没有办法告诉循环这样做?有没有其他方法可以做到这一点我不考虑?

P.S。我知道测试的筛选方法

3 个答案:

答案 0 :(得分:2)

使用while循环代替:

k = 3;
odd = false;
while( k<=end ) {
    k += odd ? 2 : 4;
    odd = !odd;
}

答案 1 :(得分:2)

这样的东西?

oscillate = false;
k = 3;
while(k <= end)
{
    testForPrimes(k);
    k += oscillate ? 2 : 4;
    oscillate != oscillate;
}

答案 2 :(得分:2)

只为了它的乐趣...

for (var k=3,l=0; k<=end; k+=2*(l%2+1),l++){ }