Dmitriy40, а где можно увидеть биекцию в краткой форме, то есть только имена паттернов?
Командой в консоли:
for /f "tokens=3,5 delims=b*@" %a in (patterns_sort_by_Hugo.txt) do @echo b%a:%b>>patterns_only_b_and_lcm.txtДля файла patterns_sort_by_Dmitriy.txt тоже разумеется сработает.
2. Отсутствие у Hugo компа с Виндой.
Совершенно не мешает
координировать работу.
Языковый барьер да, хуже, но запросить паттерны по списку, отослать логи и сказать какие посчитаны - несложно, гугло переводчик точно справится.
Кстати, нашёл, что Вы собирались считать именно шаг 14642258400:
Передумал.
Хотя от этого диапазон уменьшается всего лишь на 0.03%.
Вот именно. И столько экономить ...
Плюс вдруг Hugo ошибся и что-то пропустил, считаю вполне можно пожертвовать совершенно жалкие 0.03% времени ради лишней перепроверки.
2. А вот код Дмитрия, при всем к нему уважении, доказательной силы не имеет.
И я с этим вполне согласен. Почему и не хочу (пока что) что-то считать
полностью, ведь для нахождения почти всех цепочек достаточно проверить лишь самые малые простые (в квадратах), что решает первую задачу из указанных.
Полностью согласен и с комментарием о покрытии тестами.
Может быть Вы и не заметили, но я и после обнаружения этой ошибки проверял проги Дмитрия на других цепочках. На данный момент ошибок счёта в последней версии не выявлено.
Спасибо! По идее это должен делать я и сам, но как обычно или времени нет, или не подумал, или проверил лишь частично (как например
глюк с ненахождением известной минимальной 11-ки).
И всё же я больше согласен с
EUgeneUS: если уж цепочка нашлась, то это 100% верно, а вот если ничего не нашлось, то остаётся место для сомнений. В частности и поэтому
доказательство минимальности существенно труднее
нахождения решения. И покрыть тестами как бы не сложнее написания кода, без знания тонкостей реализации невозможно гарантированно покрыть тестами всю возможную область (сколько раз и я и Вы обнаруживали неочевидные причины пропуска каких-то цепочек).
Насколько понимаю,
1. Программы Дмитрия, которые есть в общем доступе сейчас, условно их назовем "линейный перебор с ускорителями", далеко не всегда быстрее кода Хуго.
Да. Причём лично я сравнивал AVX2 реализации, а SSE ещё вдвое медленнее. И самое неприятное, я не вполне уверен как заранее (по паттерну или шагу или по другим признакам),
без запуска, оценить быстрее будет или нет. И если для моих программ пока что оценить время несложно (оно линейно по интервалу), то для программы Hugo такую оценку получить сильно сложнее, даже запустив счёт и посмотрев в прогресс/логи. Если он всё же опишет как по началу его лога более-менее корректно оценить общее время — ситуация возможно изменится и можно будет выбирать какой программой выгоднее считать. Но это вопрос не ко мне, а к нему.
Вот что имел в виду. Проги Дмитрия проверяют до
. А вот эта цепочка хоть и незначительно, но всё-таки повыше:
LCM14642258400-4552831417-8:10000190907136349587417: 4, 32, 16, 12, 32, 12, 12, 12, 12, 12, 8, 12, 4,128, 12, valids=8, maxlen=5
Поясняю: при поиске других цепочек (15, 14, 13) внутри самого глубокого цикла стояла проверка что получаемое число не выше порога, даже если ускоритель немного и зашёл за него и вернул кандидатов. В текущем коде такой проверки нет (и ради скорости, и ради простоты кода, хотите добавьте, см. ниже). А интервал для проверки ускорителю передаётся фиксированный (1e8) и потому он вполне может заходить на вот эту величину (1e8*шаг_паттерна) за предел и такие цепочки отброшены не будут. У себя
в совсем другом коде я это поправил (вычислением интервала для проверки ускорителем на лету):
Несколько последних больше 1e22 так как ускорители ночью считали с фиксированным шагом и последний кусок нередко вылетал за верхний предел. Утром и это поправил, больше таких не будет.
Да, возможно стоило пояснить что поправил лишь у себя, а в выложенном коде всё осталось по прежнему. Но я и не вижу в этом большой проблемы, ну посчитается немного лишнего, для не слишком больших шагов паттерна это слёзы, а для больших всё происходит и так быстро и экономить секунды ... Если очень хотите добавьте в код в условие проверки
if(k>=8 ещё и условие
h<stop (получится
if(h<stop && k>=8) и всё.
-- 08.11.2022, 14:03 --Да, о планах.
Сейчас фактически ничего не считаю.
Рекурсивный перебор пишу, но медленно. Засада не в самом переборе, его-то сделать легко, а в выборе условий для переключения режимов, и вот тут конкретная засада, слишком они сложные для хорошей точности оценки (которую необходимо производить в реальном времени, а не один раз и навсегда), ставить же "на глаз" может дать проигрыш в несколько раз.
У меня тут другая идея, после сравнения скорости кода Hugo с банальным кодом PARI, похоже код Hugo можно и ещё ускорить без всяких укорителей или добавления чего-то нового, всего лишь уменьшить одну из констант в коде. Вот и занялся проверкой и доказательством этой идеи. И даже если он вдруг и не захочет такого делать, значит ускорю свой (будущий) код. Ценой однократного доказательства допустимости уменьшения константы, думаю за несколько дней счёта справлюсь. Т.е. один раз потратить много времени (дни) чтобы ускорить проверку
тотально всех паттернов. Насколько получится ускорить пока непонятно, прикидываю хотя бы в несколько раз (1.5-2-3), надеюсь и до порядка, но тут вопрос сколько потратить времени на доказательство (оно квадратично от коэффициента ускорения всех паттернов). Э, настолько ускорится не проверка всего паттерна, а лишь перебор больших простых в квадрате, но это позволит чаще запускать второй/третий перебор и это тоже даст эффект.