我想减少素数测试中的计算负荷。目前我的循环只测试赔率,如下:
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。我知道测试的筛选方法
答案 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++){ }