.\hl1-c-windows-x86_64.exe 99 0 92
[365062803855750e0, 4497676255887360e0, 25943414144042700e0, 93060625575511296e0, 232545041481394696e0, 429736002403280400e0, 608459037974968772e0, 674776278188887384e0, 594129179154767542e0, 418501104993713916e0, 236525621094613078e0, 107136635186126094e0, 38700384029637332e0, 11048983115220804e0, 2460206249137560e0, 419457931647292e0, 53441623663262e0, 4926173122432e0, 313672520592e0, 12656289426e0, 251085120e0]
Time: 5.864588200s
Попросил модель GPT‑5.6 Sol (Ultra) оптимизировать программу с поиском оптимальных алгоритмов.
Вот что ответила модель:
Алгоритм
Реализован гибрид:
OR-zeta/Mobius transform для 90/92;
параллельный reflection-aware DFS для 120/210;
заранее вычисленные остатки и таблицы произведений;
точная 128-битная арифметика до 120, 192-битная до 210;
динамическое распределение работы между восемью потоками.
Исследовались ZDD, sparse polynomial, SharpSAT-TD, ADDMC, официальный d4 и subset transforms Бьёрклунда и соавторов. Для этой задачи выбранный гибрид оказался быстрее протестированных альтернатив.
https://arxiv.org/abs/2308.15819https://arxiv.org/abs/1907.05000https://github.com/crillab/d4https://arxiv.org/abs/cs/0611101Результаты
90 0 120: полный точный ряд, медиана 15.052 s.
5 0 210: 0.131 s.
7 0 210: 9.366 s.
8 0 210: 58.294 s.
Важное ограничение: 90 0 210 принимается программой и арифметически безопасна, но полный расчёт пока практически невыполним. Между слоями 7 и 8 время выросло в 6.22 раза. Утверждать, что найден «очень быстрый» алгоритм полного ряда 210, было бы неправдой.Обе Windows-сборки прошли 8/8 тестов, независимый буквальный oracle, ASan/UBSan, TSan, Valgrind и четыре статических анализатора.
Мой запрос для модели: "например 90 0 110, то какие алгоритмы лучше работают?"
Ответ:
Для 90 0 110 лучше принудительно использовать wide-алгоритм:
Как выбирается алгоритм
Диаметры примерно до 92: автоматический гибрид hash + OR-zeta transform.
Диаметры до 128: сначала пробуется 64-битный mask-backend.
При переполнении: автоматический повтор через wide-backend.
Диаметры 130–210: wide-backend выбирается сразу.
--wide: принудительно включает параллельный DFS с отражательной симметрией и точной многоразрядной арифметикой.
--hash: принудительно включает старый 64-битный алгоритм.
--reference: медленный буквальный oracle, только до 25 необязательных позиций.
Для 110 автоматический выбор сейчас неудачен: начальное значение занимает только 61 бит, поэтому программа сначала запускает 64-битный алгоритм, который разрастается по состояниям. Поэтому используйте именно --wide.
Код:
.\hl1-c-windows-x86_64.exe --wide --threads 8 90 0 110
[1184794736150025000e0, 16859671669800960000e0, 113402284046134888374e0, 479392457805790470144e0, 1428494592766413777574e0, 3189625825866809747296e0, 5538154844652822968774e0, 7658726745848271141284e0, 8570498175790734960094e0, 7841767030108829207254e0, 5903388996261958758904e0, 3667314316625188105690e0, 1880008791392177707080e0, 793072342272734288602e0, 273708728311875469998e0, 76575512538913594328e0, 17135473474146656486e0, 3009387016149433986e0, 403835051230427806e0, 39837681078866066e0, 2726178673625610e0, 117941760127526e0, 2736937010836e0, 23930334360e0]
Time: 1.837226900s