Meissel_Lehmer模板
1.并查集模板2.求质因数模板3.二分图最大匹配模板(匈牙利算法)4.欧拉函数模板5.ST表模板6.快速幂模板7.字典树模板8.矩阵模板9.Dijkstra单源最短路模板10.最近公共祖先模板(LCA)11.拓扑排序模板12.区间素数筛模板13.Kruskal和Prim模板14.树状数组模板15.二维坐标离散化模板16.单点修改区间查最值-树状数组模板17.KMP模板18.二叉搜索树模板19.DIjkstra进阶模板 路径记录 按权重(结点数最小等)记录20.判断负环模板21.Exgcd 模板22.压位高精度模板23.线段树模板24.扫描线模板25.莫队模板26.带修莫队模板27.SCC缩点模板28.取模+组合数29.FFT 高精度乘法模板30.字符串自然溢出哈希/单哈希/双哈希模板31.树模板32.dsu on tree 模板33.线段树模板重制34.主席树模板35.大数质因数分解模板36.线段树合并模板37.int128输入输出流
38.Meissel_Lehmer模板
39.浮点高精度40.自适应辛普森法41.unordered_map随机底数种子复杂度 \(O(n^\frac 23)\),计算 \(1\sim n\) 的素数个数
#define div(a, b) (1.0 * (a) / (b)) #define half(x) (((x) - 1) / 2) i64 Meissel_Lehmer(i64 n) { if (n <= 3) { return max(n - 1, 0LL); } long long v = sqrtl(n); int s = (v + 1) / 2; vector<int> smalls(s), roughs(s); vector<i64> larges(s); for (int i = 0 ; i < s ; i++) { smalls[i] = i; } for (int i = 0 ; i < s ; i++) { roughs[i] = i * 2 + 1; } for (int i = 0 ; i < s ; i++) { larges[i] = half(n / roughs[i]); } vector<bool> skip(v + 1); int pc = 0; for (int p = 3 ; p <= v ; p += 2) { if (skip[p] == false) { i64 q = p * p; if (q * q > n) { break; } skip[p] = true; for (int i = q ; i <= v ; i += 2 * p) { skip[i] = true; } int ns = 0; for (int k = 0 ; k < s ; k++) { int i = roughs[k]; if (skip[i]) { continue; } long long d = 1LL * i * p; larges[ns] = larges[k] - (d <= v ? larges[smalls[d >> 1] - pc] : smalls[half(div(n, d))]) + pc; roughs[ns++] = i; } s = ns; for (int i = half(v), j = (((v / p) - 1) | 1) ; j >= p ; j -= 2) { int c = smalls[j / 2] - pc; for (int e = j * p / 2 ; i >= e ; i--) { smalls[i] -= c; } } pc++; } } larges[0] += 1LL * (s + 2 * (pc - 1)) * (s - 1) >> 1; for (int k = 1 ; k < s ; k++) { larges[0] -= larges[k]; } for (int L = 1 ; L < s ; L++) { int q = roughs[L]; long long m = n / q; int e = smalls[half(m / q)] - pc; if (e < L + 1) { break; } long long t = 0; for (int k = L + 1 ; k <= e ; k++) { t += smalls[half(div(m, roughs[k]))]; } larges[0] += t - 1LL * (e - L) * (pc + L - 1); } return larges[0] + 1; } #undef div #undef half
本文作者:Ke_scholar
本文链接:https://www.cnblogs.com/Kescholar/p/18351413
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步