HuzDmitriy40О влиянии ключей -p и -x на скорость расчета в pcoul.
1. Ключ -p при малых значениях оказалось влияет на скорость расчёта не квадратично, а гораздо меньше. Это печально, но объяснимо.
Примеры (все паттерны из одной группы, с одинаковыми LCM, количеством подставляемых мест с большими степенями простых и количеством проверяемых мест).
Код:
001 pcoul(12 14) -p200 -f13 -g10 -x70000000000000000000000000000000 -b1415 *RT*
305 3^2.5 2.29^2 17^2 2^2.3 7^2 2.5^2 3.23^2 2^5 19^2 2.3^2 5.11^2 2^2.7 3.13^2 2.61^2: 4918210 / 28089952 (563.25s)
...
305 3^2.5 2.23^2 37^2 2^2.3 7^2 2.5^2 3.31^2 2^5 197^2 2.3^2 5.11^2 2^2.7 3.13^2 2.67^2: 16606 / 40012 (1197895.81s)
305 3^2.5 2.23^2 41^2 2^2.3 7^2 2.5^2 3.19^2 2^5 17^2 2.3^2 5.11^2 2^2.7 3.13^2 2.37^2: 7288472 / 38197550 (1198485.31s)
Код:
001 pcoul(12 14) -p150 -f13 -g10 -x70000000000000000000000000000000 -b1415 *RT*
305 3^2.5 2.29^2 17^2 2^2.3 7^2 2.5^2 3.23^2 2^5 19^2 2.3^2 5.11^2 2^2.7 3.13^2 2.61^2: 5276278 / 28089952 (562.84s)
...
305 3^2.5 2.23^2 37^2 2^2.3 7^2 2.5^2 3.71^2 2^5 139^2 2.3^2 5.11^2 2^2.7 3.13^2 2.29^2: 977 / 81783 (1027329.25s)
305 3^2.5 2.23^2 41^2 2^2.3 7^2 2.5^2 3.19^2 2^5 17^2 2.3^2 5.11^2 2^2.7 3.13^2 2.29^2: 23964954 / 62178889 (1027899.00s)
Код:
001 pcoul(12 14) -p500 -f13 -g10 -x70000000000000000000000000000000 -b74 *RT*
305 2.29^2 3.13^2 2^2.7 5.11^2 2.3^2 17^2 2^5 3.23^2 2.5^2 7^2 2^2.3 19^2 2.107^2 3^2.5: 8480329 / 9129418 (599.68s)
...
305 2.113^2 3.13^2 2^2.7 5.11^2 2.3^2 37^2 2^5 3.19^2 2.5^2 7^2 2^2.3 491^2 2.23^2 3^2.5: 3350 / 6027 (1085151.91s)
305 2.29^2 3.13^2 2^2.7 5.11^2 2.3^2 41^2 2^5 3.19^2 2.5^2 7^2 2^2.3 17^2 2.59^2 3^2.5: 3162018 / 9449190 (1085751.89s)
Первые для лога считались на немного более медленной машине, а третий на более быстрой. То есть весь выигрыш по снижению значения в ключе -p в два-три раза - это всего лишь разница в скорости компьютера.
Конечно, ближе к концу разница может увеличиться, но первые два лога ещё на завершились.
2. Разбиение диапазона расчета ключом -x оказывается влияет на время расчета нелинейно и, видимо, неаддитивно. Вот это удивительно. Видимо, более оптимально считать большими диапазонами, а не маленькими. Примеры (все с одного компьютера).
Код:
001 pcoul(12 14) -p300 -f13 -g10 -x70000000000000000000000000000000 -b1624 *RT*
305 17^2 2.71^2 3.103^2 2^2.7 5.13^2 2.3^2 11^2 2^5 3.41^2 2.5^2 7.97^2 2^2.3 19^2 2.181^5 (595.72s)
...
305 149^5 2 3.179^5 2^2.7 5.13^2 2.3^2 11^2 2^5 3 2.5^2 7.107^2 2^2.3 277^2 2 (312527.09s)
367 coul(12, 14): recurse 27439842019, walk 54336829924, walkc 12099576240 (312597.95s)
Код:
001 pcoul(12 14) -p300 -f13 -g10 -x70000000000000000000000000000000:210000000000000000000000000000000 -b1624 *RT*
305 17^2 2.173^2 3.107^2 2^2.7 5.13^2 2.3^2 11^2 2^5 3.137^2 2.5^2 7.67^2 2^2.3 19^2 2.293^2 (599.94s)
...
305 131^5 2 3.29^2 2^2.7 5.13^2 2.3^2 11^2 2^5 3.269^2 2.5^2 7.139^2 2^2.3 23^2 2 (473273.88s)
367 coul(12, 14): recurse 28933862100, walk 28361114412, walkc 8627229447 (473423.84s)
Второй пример - это тот же самый паттерн, но считается диапазон в два раза больше. Вместо ожидаемых 600 - 650 тысяч секунд, время составило 473 тысячи секунд.
Это вряд ли связано с тем, что считался диапазон в бОльших числах. Так как при разбиении на диапазоны одинаковой длины и время получается примерно одинаковым