YadryaraЕсли я где-то не уследил за языком и какие-то слова оказались слишком резкими — приношу свои извинения, это вышло не специально.
1. Замена
или обратная в одной позиции влияет на время счета других позиций только постольку, поскольку изменяет разрядность искомых чисел.
На время проверки да, на вероятность/частоту что такая проверка вообще будет производиться - нет, не только этим.
3. То, что число проверяется в два (и более) проходов (условно: быстрый тест для фильтрации и медленная окончательная проверка) - это влияет на решение о замене, но это учитывается во временах, которые используются в критерии - должны браться средние времена проверок.
4. Так же, через средние времена, должны учитываться и возможные выбросы времени проверки (конкретной позиции).
Тут получается усреднение не только по времени проверки конкретного места, а и по вероятности вообще дохода проверки до него. И последняя зависит от множества других мест, не только от этого конкретного.
Давайте на примере: возьмём L паттерн
и рассмотрим когда будет проверяться место
, сначала с порогом простых
, для этого должны выполниться условия:
1. Все
должны быть простыми.
2. На месте
должно быть или сразу
или составное без делителей менее
.
3. На месте
должно быть или сразу
или составное без делителей менее
.
Пока ещё вроде просто. Но теперь рассмотрим условия что это самое место
будет проверяться дольше, повторно, уже с порогом по простым
:
1. Все
должны быть простыми.
2. На месте
должно быть или сразу
или составное без делителей менее
.
3. На месте
должно быть или сразу
или составное без делителей менее
.
4. На месте
должно быть или сразу
или составное без делителей менее
.
5. На искомом месте
должно быть составное без делителей меньше
.
Заметьте, добавилось условие на место
, а пороги в условиях для разных мест разные.
Посмотрим условия что проверка места
займёт секунды (до 5 максимум):
1. Все
должны быть простыми.
2. На месте
должно быть или сразу
или
неразложимое за 5с составное.
3. На месте
должно быть или сразу
или
неразложимое за 5с составное.
4. На месте
должно быть или сразу
или составное без делителей менее
.
5. На искомом месте
должно быть составное без делителей меньше
.
Причём чётко формализовать понятие "неразложимое за 5с составное" я не смогу, не знаю как
factor() ищет простые в разложении когда не указываешь порог, там точно не последовательный перебор, очень часто находит "средние" простые (десяток и более цифр) очень быстро. Плюс даже если и не разложилось, но нашёлся хоть один делитель, не важно какого размера (но понятно больше
проверенных ранее), то такое место уже не будет "неразложимым за 5с составным" и условие окажется невыполненным так как станет точно известно что там гарантированно не
. Про возможность быть простым не в первой степени не упоминаю, это слишком редко случается, но всё же случается и в условия должно бы входить (в программе учитывается).
Как Вы собрались из этой кучи вытащить лишь среднее время проверки места
я не понимаю. Попытаться усреднить по реальной статистики конечно можно, но результат этой попытки будет сильно зависеть не только от паттерна и самого места
, но и от множества других условий (мест
и соответственно конкретной величины
). У меня в логах например место
проверялось скорее всего вообще лишь однажды, в найденной 9-ке, больше не проверялось ни разу из 1100 цепочек. И потому непонятно зачем вообще учитывать время проверки места
если оно практически никак не влияет на общее время работы (5с против двух суток). Да, на другие места условия чуть проще (кстати не на все), но всё равно все они зависят как минимум от всех мест
и от
(для L паттернов, для R будет
).
Возможно возразите что на
можно и плюнуть, ладно, распишу условия на время проверки места
, которое проверяется хоть как-то почти всегда (только для L паттернов, для R всё будет зеркально):
1. Если не все
простые, то дальше не проверять.
2. Проверить места
с порогом
.
3. Если на
сразу
или составное без делителей менее
, то проверить
с порогом
.
4. Если на
сразу
или составное без делителей менее
, то проверить
с порогом
.
5. Если на
сразу
или составное без делителей менее
, то проверить
с порогом
.
6. Если на
сразу
или составное без делителей менее
, то проверить
с порогом
.
7. Если на местах
или на местах
или на местах
или на искомом месте
оказалось не
и не составное без делителей менее
, то дальше ничего не проверять.
8. Повторить пункты 2-7 с порогом
, при этом места с 60-ю делителями пропускать и заново не проверять.
9. Повторить пункты 2-7 с порогом в 5с (со всеми оговорками выше про "неразложимость за 5с"), при этом места с 60-ю делителями пропускать и заново не проверять.
Как легко заметить тут условия существенно сложнее/запутаннее (точнее они простые, сложно их формально записать словами). И они
другие чем для
и зависят от других позиций в цепочке. Фактически время проверки места
зависит от факторизации всех остальных мест
в цепочке. Ну и как его усреднять независимо от остальных ...