А на больших числах ещё забавнее:
Код:
? forstep(p=43^11,43^11+10^9,86, if(factor(p,44)[1,1]==43, cnt++););
time = 15,960 ms.
? forstep(p=43^11,43^11+10^9,86, if(p%3>0 && p%5>0 && p%7>0 && p%11>0 && p%13>0 && p%17>0 && p%19>0 && p%23>0 && p%29>0 && p%31>0 && p%37>0 && p%41>0, cnt++););
time = 7,769 ms.
? forstep(p=43^11,43^11+10^9,86, if(1, cnt++););
time = 7,630 ms.
Типа длинный if аж в
сто раз быстрее простой factor!
Кстати для больших примориалов даже на малых числах уже и не так уж быстрее:
Код:
? cnt=0; forstep(p=59^2,10^9,2, if(factor(p)[1,1]==59, cnt++););
time = 15min, 38,611 ms.
? cnt=0; forstep(p=59^2,10^9,2, if(factor(p,60)[1,1]==59, cnt++););
time = 3min, 11,851 ms.
? cnt=0; forstep(p=59^2,10^9,2, if(p%3>0 && p%5>0 && p%7>0 && p%11>0 && p%13>0 && p%17>0 && p%19>0 && p%23>0 && p%29>0 && p%31>0 && p%37>0 && p%41>0 && p%43>0 && p%47>0 && p%53>0, cnt++););
time = 5min, 26,449 ms.
? cnt=0; forstep(p=59^2,10^9,59, if(factor(p)[1,1]==59, cnt++););
time = 15,414 ms.
? cnt=0; forstep(p=59^2,10^9,59, if(factor(p,60)[1,1]==59, cnt++););
time = 8,330 ms.
? cnt=0; forstep(p=59^2,10^9,59, if(p%3>0 && p%5>0 && p%7>0 && p%11>0 && p%13>0 && p%17>0 && p%19>0 && p%23>0 && p%29>0 && p%31>0 && p%37>0 && p%41>0 && p%43>0 && p%47>0 && p%53>0, cnt++););
time = 11,217 ms.
? cnt=0; forstep(p=59^2,10^9,59*2, if(factor(p)[1,1]==59, cnt++);); cnt
time = 9,126 ms.
%1 = 2306411
? cnt=0; forstep(p=59^2,10^9,59*2, if(factor(p,60)[1,1]==59, cnt++);); cnt
time = 4,806 ms.
? cnt=0; forstep(p=59^2,10^9,59*2, if(p%3>0 && p%5>0 && p%7>0 && p%11>0 && p%13>0 && p%17>0 && p%19>0 && p%23>0 && p%29>0 && p%31>0 && p%37>0 && p%41>0 && p%43>0 && p%47>0 && p%53>0, cnt++););
time = 5,600 ms.
\\Измерение оверхеда цикла
? cnt=0; forstep(p=59^2,10^9,59*2, cnt++);
time = 5,538 ms.
? cnt=0; forstep(p=59^2,10^9,59*2, if(1, cnt++);); cnt
time = 5,819 ms.
%2 = 8474547
? cnt=0; forstep(p=59^2,10^9,59*2, if(cnt<2306411, cnt++);); cnt
time = 2,076 ms.
%3 = 2306411
Вот они, погрешности методики измерений, кратное увеличение числа инкрементов пересиливает пустоту if-а.
wrest, как видите в последнем запуске правильное значение оверхеда почти втрое ниже.