Однако Дмитрий проигнорил.
Потому что 8e34 я использую только для
оценок (в том числе времени счёта), а не для реального счёта, в котором как раз беру или 8.1e34, или 8.03e34, лично меня такая точность в обоих случаях устраивает и запоминать и вбивать/копировать точное число ленюсь.
Но на самом деле конечно и гораздо большие простые числа в квадратах могут быть. Конкретный расчёт пока не делал.
Да чего его там делать-то ... 10 минут программку написать (главное снова про квадраты не забыть) и полминуты она считает:
Код:
\\Сколько вариантов выбора 6-ти простых чтобы их произведение не превысило sqrt(8e34/7.2e9)=3.335e12
n=0; q=0; m=3.335e12;
{forprime(a=17,ceil(m^(1/6)),\\Простые до 17 не учитываем
forprime(b=a+1,ceil((m/a)^(1/5)),
forprime(c=b+1,ceil((m/a/b)^(1/4)),
forprime(d=c+1,ceil((m/a/b/c)^(1/3)),
forprime(e=d+1,ceil((m/a/b/c/d)^(1/2)),
n+=primepi(ceil(m/a/b/c/d/e))-6;\\Простые до 17 не учитываем
\\forprime(f=e+1,ceil(m/a/b/c/d/e), q+=ceil(8e34/7.2e9/(a*b*c*d*e*f)^2););\\Подсчитаем и количество итераций
);
);
);
);
);}
print(n*6!);\\Размещений в 6! раз больше
print(q*6!);\\Итераций тоже в 6! раз больше
Вывод:
483272950320
49865208777360
Всего порядка 5e11 на каждый паттерн с LCM=7.2e9, которых 94, т.е. всего 4.5e13 вариантов.
Паттерны с большими LCM можно не учитывать, их хоть и вдвое больше, но вариантов будет сильно меньше из-за сокращения количества простых. Желающие могут изменить m= и проверить прямо. Например общее количество вариантов со следующим по величине LCM=2.47e12 всего чуть менее 4e11, т.е. менее 1%.
Но общее количество вариантов паттернов мало о чём говорит в плане затрат времени, ведь каждый из них надо ещё и просчитать до 8e34, т.е. надо бы знать и потребное количество итераций, для
оценки которого раскомментировать команду
forprime(f=e+1,...);, что замедлит программу до десятка минут и выдаёт результат в 5e13 итераций (2.1e15 на все 42 паттерна), т.е. в среднем всего по 100 итераций на паттерн, что например для ускорителей очень и очень мало.
Получается что на каждый паттерн из 42 надо почти 5e11 компиляций ускорителей и потом ещё 5e13 итераций им выполнить. Компиляция занимает 0.3с, выполнение итераций можно принять 1e9/c, компиляция занимает намного больше времени, значит прямой смысл исключать квадратичные переборы и уменьшать время компиляции за счёт возрастания количества итераций.
И теперь имея готовую программку оценки количества итераций и количества вариантов ускорителей можно легко оценить что будет если убрать один цикл перебора квадратов простых, для этого заменим всё тело внутреннего цикла на
n++; q+=ceil(8e34/7.2e9/(a*b*c*d*e)^2); (т.е. уберём цикл по f) и запустим программу снова, она за 3с выдаст 23e9 компиляций и 28e15 итераций. 23e9 компиляций (по 0.3c) всё ещё в 250 раз дольше 28e15 итераций, хотя последние уже занимают почти год счёта (в один поток со скоростью 1e9/c).