Ну sum-то я для 5е19 не знаю,
Так для расчёта кэфа она и не нужна, нужно отношение sum к праймориалу, а имея его же (отношение) для 49e18 легко пересчитать и для 50e18, достаточно просто домножить на коэффициент:
Код:
? s=1.0;forprime(p=sqrt(49e18),sqrt(5e19),s*=(p-15)/p);s
time = 1,826 ms.
%1 = 0.99333821536189460705646212823243228819
И кстати имея такие вот коэффициенты для любых точек можно легко и быстро вычислять любые паттерны одинаковой длины, ведь сам этот коэффициент от паттерна не зависит (если брать меньшее простое не менее 100 скажем, до которого можно легко досчитать каждый паттерн индивидуально). Т.е. вместо sum и праймориала надо знать лишь отношение sum/p# для простых скажем до 100 (когда точно количество запрещённых остатков равно длине паттерна, для 19-252 это 43, так что 100 должно хватить всем с запасом), а дальше просто домножать на известный заранее коэффициент (посчитанный один раз для любых паттернов длины 15) и всё.
Может быть удобнее даже не sum/p#, а сразу sum*d/sqrt(d)# для простых от 100 до sqrt(d), т.е. всю дробь без количества цепочек. И просто на него домножать любой паттерн длиной 15 (для других длин аналогично посчитать один раз коэффициенты и всё).
Причём в обоих случаях коэффициенты имеют небольшие значения и легко считаются на PARI, ну по крайней мере до 1e20-1e21 (один раз же). А цепочек дальше у нас и нет и не предвидится.
Sum и её разбивка по длинам важны для доли чистых, вот это просто так не посчитать, да.
Пожелание: сделать, чтоб кэф в программе считался автоматом с аналогичным показом всей дроби.
Непрактично: в программе просчёта sum и долей по длинам нет цепочек, а в программе поиска цепочек нет частот и праймориалов. И они вообще кардинально по разному работают: первая идет по всем простым (получаемым решетом Эратосфена), вторая идет по списку разрешённых остатков по каждому простому.
Что можно сделать, так это вместо sum считать сразу sum*d/sqrt(d)# (дробь без числа цепочек), как собственно и делал на 4-й странице темы, когда оценивал 15, 17, 19. Вот только это замедлит программу так как понадобится медленная команда деления на каждое простое (пока там только быстрые умножения), чего не хотелось бы. И учитывая трюк выше с универсальным коэффициентом для любых паттернов одинаковой длины, и необходимости не вижу.