Так во время этого нового вызова проверяются все 106 вариантов, включая те 80, что были проверены только что или именно новые 26 вариантов??
B1 это не варианты.
Если по аналогии, то это праймориал до которого искать цепочки (которые аналог делителей). При этом перебираются не все возможные варианты, а лишь один случайным образом (в зависимости от seed) выбранный список из например rounds*30 штук. И чем B1 больше, тем больше цепочек можно найти, но и тем больше числа и потому медленнее каждая проверка.
Если запускать
с теми же seed и B1, то проверяться будут да, те же варианты кривых, потому вызов rounds>a после rounds=a перепроверит часть вариантов. Но если поменять seed
или B1, то проверяться будут вообще говоря уже совсем другие варианты даже при том же rounds. Даже если поменять только B1, то всё равно, списки размажутся по большим числам и проверяться будут уже другие варианты даже при том же seed. Можно считать что seed это n0, а B1 это m из формулы n=n0+m*i, где i=1..rounds*30, аналогия ещё грубее, но даёт понять что меняя хоть seed, хоть B1, проверяться будут другие варианты, и что с ростом B1 числа n увеличиваются, а seed на величину чисел (и соответственно скорость работы) практически не влияет.
Проверить всё это можно посмотрев внимательнее на выдачу факторизации после \g 4, там наверняка будут отличия при нахождении делителя при разных B1. Ну вот пример:
Код:
? \g 4
debug = 4
? isnull(Z_ECM(1870078940459684045521259474606403291546522792763031595107297821330123,1,1,80))
ECM: time = 0 ms
ECM: B1 = 80, B2 = 8800, gss = 32*420
ECM: time = 16 ms, B1 phase done, p = 83, setting up for B2
ECM: time = 0 ms, entering B2 phase, p = 293
time = 16 ms.
%239 = 5761788911
? isnull(Z_ECM(1870078940459684045521259474606403291546522792763031595107297821330123,1,1,100))
ECM: time = 0 ms
ECM: B1 = 100, B2 = 11000, gss = 32*420
ECM: time = 31 ms, B1 phase done, p = 101, setting up for B2
ECM: time = 0 ms, entering B2 phase, p = 311
time = 31 ms.
%240 = 5761788911
Видите другое значение p в B2 фазе, значит что-то поменялось. Что - непонятно.
-- добавлено через 6 минут --И да, 31мс вовсе не обязательно вдвое больше 16мс.

Потому что это явно округление на тик таймера и реальное время может быть например 18мс и 14мс, или 33мс и 29мс. На самом деле разница и правда небольшая:
Код:
? for(i=1,1000, isnull(Z_ECM(1870078940459684045521259474606403291546522792763031595107297821330123,1,1,80)));
time = 23,807 ms.
? for(i=1,1000, isnull(Z_ECM(1870078940459684045521259474606403291546522792763031595107297821330123,1,1,100)));
time = 26,879 ms.
Вот потому и нельзя сравнивать скорости таких быстрых вычислений, слишком груб тик таймера.
-- добавлено через 11 минут --Вызов функции my_ecm(cha,rounds,seed,b1) первоначально осуществляется с параметрами (cha,1,1,80).
Затем, если фактор не найден, b1 увеличивается на треть и осуществляется повторный вызов с параметрами (cha,1,1,106).
Можно считать что seed это n0, а B1 это m из формулы n=n0+m*i, где i=1..rounds*30, аналогия ещё грубее, но даёт понять что меняя хоть seed, хоть B1, проверяться будут другие варианты,
Потому я уже тыщу раз говорил что повторные вызовы лучше делать с
другим seed, чтобы покрыть больше вариантов кривых. А лучше скорее всего вообще
каждый раз случайно выбирать seed. Одинаковые seed важны для многократных тестов скорости, чтобы выполнение было детерминированным от запуска к запуску одинаковых тестов (не вызовов ECM). Но и с random это реализуется стандартным способом через setrand.