то надо придумать такое разбиение, чтобы выделить участок в 10-20% от всего диапазона
, на котором было бы как можно меньше чужих чисел.
А придумайте. Я уже бошку сломал.
Чтобы не сильно переписывать программу (ибо время и глюки) оно должно удовлетворять таким ограничениям: из всего множества простых
надо выделить подмножество
так чтобы выполнялись одновременно все условия:
1.
, тут важно левое ограничение, правое поправить кажется намного легче, да и оно обычно автоматически удовлетворяется из-за следующего пункта;
2.
, где
- количество разрешённых остатков, левое число лучше как можно больше (для уменьшения накладных расходов), правое обеспечивает влезание главной таблицы в кэш L2, его лучше даже
, оно не жёсткое, можно и немногим больше, но не в разы, иначе скорость падает (при количестве потоков больше 4 затыкается по скорости кэщ L3, про размеры больше него и скорость памяти вообще молчу).
Это вот множество
будет перебираться внутри программы самым внутренним циклом и соответственно снаружи эти простые нельзя использовать для деления на группы.
Из ограничений первого пункта быстро следует что в
может быть от 5 до 9 простых.
Я даже программку написал по перебору всех вариантов такого разбиения, ничего удобного нет. Лучшее что нашёл -
, т.е. эти числа в разбиение на группы не входят, как сейчас не входило
(для
используется подобранное по быстрому вручную
с произведением количества остатков
).
Потом надо оставшиеся простые разбить ещё на два подмножества, из одного сделать разбиение на группы, другое отдать программе для перебора, при этом время перебора должно оставаться удобным для всех наших компов (скажем от 10с до пары часов, это минимум 2e11 вариантов к перебору). Но это уже легче, первое разбиение важнее.
Ну и разумеется все разбиения должны легко вычисляться, отсортировать все 1.5e19 вариантов для
в желаемом порядке нереально.
Кстати я сделал проверку больших чисел (до
) на простоту тестом Ферма (хватает одного основания), давно хотел, пока правда довольно медленно, но это решаемо. Зато теперь можно отдавать на допроверку в PARI лишь
почти точно подходящие варианты (например с valids не меньше 15 или даже 17), логи будут сильно меньше, вероятность ошибки теста менее 1 на триллион (можно вообще от проверки в PARI отказаться, ну кроме valids=19).
Напомню, что их ожидается почти 11 штук на весь диапазон.
Не совсем так, это мат.ожидание, реальное количество может быть как заметно больше, так и заметно меньше: если верить
vicvolf, то оно
, т.е. с вероятностью 68% лежит в диапазоне
и с вероятностью 95% в диапазоне
и с вероятностью 99.7% в диапазоне
. Вполне может быть что и вообще лишь одно ... Хотя больше 4шт тоже достаточно вероятно. Вероятность что оно лежит в диапазоне
всего 38%, что маловато.
Для
ожидаемое количество
, вероятность что оно не меньше 1шт всего 25%.