2013-09-04 3 views
1

Я хочу уменьшить вычислительную нагрузку в тесте для простых чисел. В настоящее время мой цикл только тесты шансов, так как:Увеличение счетчика счетчика?

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

Я читал, что каждый простой, кроме 2 и 3 является функцией к = 6 +/- 1, хотя. Только тестируя 2/3rds коэффициентов, я могу уменьшить вычислительную нагрузку на 33%. Единственный способ, с помощью которого я могу это сделать, - осциллировать счетчик, чтобы увеличить на 2, затем 4, затем 2, затем 4 на каждую итерацию, например, тестирование 5, 7, 11, 13 и т. Д.

Есть ли способ сказать петле сделать это? Есть ли другой способ сделать это, я не рассматриваю?

P.S. Я в курсе метода решета тестирования

+0

Является ли это действительно вопрос Javascript? Звучит скорее как вопрос алгоритмов для SE.Math – Codeman

+0

Ну, я уже понял решение алгоритма (чтобы осциллировать счетчик), задавался вопросом, как закодировать его в javascript. но хороший момент. –

ответ

2

Используйте while петлю, вместо:

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

:) Точный же ответ отправлен почти в одно и то же время, ха-ха. – Codeman

+1

Спасибо всем за ответы. MrSlayer нуждается в репутации больше :) –

2

Что-то вроде этого?

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

Просто для удовольствия ...

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

Считываемый код предназначен для не-математики! ; Люблю это! – Codeman

+2

Если вы понимаете конструкцию 'for (before; condition; end)', я бы утверждал, что она не менее читаема :) – Emissary

+0

Нет, это определенно читаемо, немного сложнее следовать за некоторыми. Это очень умное решение. Я люблю один лайнер! Извините, если это произошло отрицательно. – Codeman

Смежные вопросы