复杂度 \(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

Meissel_Lehmer模板的更多相关文章

  1. Jade模板引擎让你飞

    写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...

  2. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  3. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  6. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  7. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  8. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  9. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

  10. DDD领域驱动设计 - 设计文档模板

    设计文档模板: 系统背景和定位 业务需求描述 系统用例图 关键业务流程图 领域语言整理,主要是整理领域中的各种术语的定义,名词解释 领域划分(分析出子域.核心域.支撑域) 每个子域的领域模型设计(实体 ...

随机推荐

  1. WPF/C#:在DataGrid中显示选择框

    前言 在使用WPF的过程中可能会经常遇到在DataGrid的最前或者最后添加一列选择框的需求,今天跟大家分享一下,在自己的项目中是如何实现的. 整体实现效果如下: 如果对此感兴趣,可以接下来看具体实现 ...

  2. 通俗易懂的路径搜索之A-star算法

    A-star算法 搜索技术 搜索技术是一种通用的问题求解技术,可以将待解决的问题转化为可搜索的问题空间,然后在该空间中搜索求解.搜索技术在人工智能领域有着非常广泛的应用. 盲目搜索 盲目搜索是最简单的 ...

  3. 全新 UI 震撼来袭!ng-matero v18 正式发布!

    前言 断断续续折腾了近两周,ng-matero v18 终于发布了.其中最大的亮点是启用 Material 3 主题以及全新的 UI 设计.特别说明,这是 ng-matero 发布五年以来首次 UI ...

  4. Windows服务器安全检查

    为降低windows服务器系统的脆弱性,除了补丁及时更新,还建议加强系统账号的管理. 1.精简系统登录账号,最小化登录权限 检查方法:开始->运行->compmgmt.msc(计算机管理) ...

  5. VulnHub_DC-2渗透流程

    VulnHub_DC-2 信息收集 探测目标主机IP地址 arp-scan -l nmap -sV -A -p- 192.168.157.143 得知开启80端口的http服务与7744端口开启的ss ...

  6. Java获取客户端请求信息

    客户端工具类 /** * 客户端工具类 * * @author hviger */ public class ServletUtils { /** * 获取String参数 */ public sta ...

  7. Dotnet算法与数据结构:Hashset, List对比

    哈希集A 是存储唯一元素的集合.它通过在内部使用哈希表来实现这一点,该哈希表为基本操作(如添加.删除和包含)提供恒定时间平均复杂度 (O(1)).此外,不允许重复元素,使其成为唯一性至关重要的场景的理 ...

  8. 「悬浮捷径SoftCircle」安卓平台的hao123,一键打开万物

    罗老师的onestep一步发布之前, 终端的打开形式还拘泥于桌面和负一屏 这种方式够简洁,但缺点明显: 1.入口单一性:只能在app首页和各种扫一扫之间选择和切换 2.操作复杂:入口切换需要频繁的进入 ...

  9. 屏幕分辨率基础概念PX,PT,DP,DPR,DPI说明

    屏幕分辨率基础概念说明 缩写 全称 说明 PX Device Pixels 设备像素,指设备的物理像素 PX CSS Pixels CSS像素,指CSS样式代码中使用的逻辑像素 DOT Dot 点,屏 ...

  10. WebGL管网展示(及TubeGeometry优化)

    前言 管路展示在三维场景中很常见.比如地下管网,建筑里面的水果,暖通管道等等的展示. 建立管路的方式主要两种: 通过3DMax C4D Blender等建模工具进行建模. 通过路径数据,程序生成三维管 ...