1489: L先生与质数V4(二分+大区间求素数模板)

1000亿以内的素数统计(Meisell-Lehmer算法) 今年沈阳有个素数计数的题,但是数据到了1e11,大概用Meisell-Lehmer能跑到2、3秒的样子,但是据说还有一种Deleglise Rivat的算法特别快,大概1e16差不多才3、4秒的样子,但是网上没有找到板子,所以就发一个Meisell-Lehmer的模板,1e11内的数差不多都能在5秒内处理完:#include using namespace std; typedef long 阅读详情

 题意

L先生想求出第n个质数(素数)是多少,你能帮助他吗?

数据

T < 70, 0 < n <= 3e6, 输入0表示结束。

输入

1

2

3

4

10

100

0

输出

Case 1: 2

Case 2: 3

Case 3: 5

Case 4: 7

Case 5: 29

Case 6: 541


HDU5901是个求1-1e11内素数个数的模板题,这题可以利用二分+那个模板求解。(用那的第二个板子应该会更快些,但不知道为什么迷之RE,所以只能将就套第一个)


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>

#define MAXN 100
#define MAXM 10001
#define MAXP 40000
#define MAX 400000
#define clr(ar) memset(ar, 0, sizeof(ar))
#define read() freopen("lol.txt", "r", stdin)
#define dbg(x) cout << #x << " = " << x << endl
#define chkbit(ar, i) (((ar[(i) >> 6]) & (1 << (((i) >> 1) & 31))))
#define setbit(ar, i) (((ar[(i) >> 6]) |= (1 << (((i) >> 1) & 31))))
#define isprime(x) (( (x) && ((x)&1) && (!chkbit(ar, (x)))) || ((x) == 2))

using namespace std;
typedef long long ll;

namespace pcf{
    long long dp[MAXN][MAXM];
    unsigned int ar[(MAX >> 6) + 5] = {0};
    int len = 0, primes[MAXP], counter[MAX];

    void Sieve(){
        setbit(ar, 0), setbit(ar, 1);
        for (int i = 3; (i * i) < MAX; i++, i++){
            if (!chkbit(ar, i)){
                int k = i << 1;
                for (int j = (i * i); j < MAX; j += k) setbit(ar, j);
            }
        }

        for (int i = 1; i < MAX; i++){
            counter[i] = counter[i - 1];
            if (isprime(i)) primes[len++] = i, counter[i]++;
        }
    }

    void init(){
        Sieve();
        for (int n = 0; n < MAXN; n++){
            for (int m = 0; m < MAXM; m++){
                if (!n) dp[n][m] = m;
                else dp[n][m] = dp[n - 1][m] - dp[n - 1][m / primes[n - 1]];
            }
        }
    }

    long long phi(long long m, int n){
        if (n == 0) return m;
        if (primes[n - 1] >= m) return 1;
        if (m < MAXM && n < MAXN) return dp[n][m];
        return phi(m, n - 1) - phi(m / primes[n - 1], n - 1);
    }

    long long Lehmer(long long m){
        if (m < MAX) return counter[m];

        long long w, res = 0;
        int i, a, s, c, x, y;
        s = sqrt(0.9 + m), y = c = cbrt(0.9 + m);
        a = counter[y], res = phi(m, a) + a - 1;
        for (i = a; primes[i] <= s; i++) res = res - Lehmer(m / primes[i]) + Lehmer(primes[i]) - 1;
        return res;
    }
}

long long solve(long long n){
    int i, j, k, l;
    long long x, y, res = 0;

    for (i = 0; i < pcf::len; i++){
        x = pcf::primes[i], y = n / x;
        if ((x * x) > n) break;
        res += (pcf::Lehmer(y) - pcf::Lehmer(x));
    }

    for (i = 0; i < pcf::len; i++){
        x = pcf::primes[i];
        if ((x * x * x) > n) break;
        res++;
    }

    return res;
}

int main()
{
    pcf::init();
    ll n, ca = 1;
    while(cin >> n && n)
    {
        ll l = 2, r = 1e8, ans;
        while(l <= r)
        {
            ll mid = (l+r)/2;
            if(pcf::Lehmer(mid) >= n)
                r = mid-1, ans = mid;
            else l = mid+1;
        }
        printf("Case %lld: %lld\n", ca++, ans);
    }
    return 0;
}



Android开发者必看:5分钟搞定DeepSeek API接入(附完整代码示例) 本文为Android开发者提供快速接入DeepSeek API的完整指南,包含环境配置、网络层设计、请求体构建等关键步骤,并附有详细代码示例。通过工程化实践,帮助开发者高效集成AI对话、代码生成等高级功能,提升移动应用竞争力。 阅读详情

相关推荐

华为2019秋招笔试Java实现(2)

华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下

hewhys的博客 1549

ZJCOJ L先生与质数V3/V4 (Meisell-Lehmer算法)

Problem L: L先生与质数V4(应各位菊苣要求) Time Limit:1 Sec  Memory Limit:16 MB Submit:298  Solved:65 [Submit][Status][WebBoard] Description 在解决了上一个质数问题之后,L先生依然不甘心,他还想计算下更多范围内的质数,你能帮助他吗?(没错这题题面和V3一毛一样)

Dust_heart的博客 1436

管理信息系统(MIS)设计

一名读者可以借阅多本图书,而一本图书也可以被不同的读者借阅,所以读者与图书之间存在着多对多的借阅关系,读者与图书之间存在着多对多的联系,即m:n的联系。每一种图书属于一种图书类型,而一种图书类型可以包含很多本图书,因此可以得到图书类型与图书之间也存在着一种一对多的联系,即图书类型与图书是1:n的联系。系统应该实现以下功能:图书管理员可以维护图书信息,包括增加新书、修改图书信息、办理图书借阅登记、图书归还登记、过期图书处理、丢失图书处理及读者借阅证件信息的维护等;

m0_69718745的博客 2477

ZJCOJ: L先生与质数V4(数论)

Problem L: L先生与质数V4(应各位菊苣要求) Time Limit: 1 Sec  Memory Limit: 16 MB Submit: 313  Solved: 71 [Submit][Status][Web Board] Description 在解决了上一个质数问题之后,L先生依然不甘心,他还想计算下更多范围内的质数,你能帮助他吗?(没错这题题面和V3一毛

junior19的博客 1821

基于IDEA与Mill构建Windows下的Chisel开发环境——香山处理器源码解析实战

本文详细指导如何在Windows系统下使用IDEA集成开发环境和Mill构建工具搭建Chisel开发环境,并以香山处理器源码为实战案例进行解析。内容涵盖环境准备、源码获取、工程构建、IDEA配置优化及代码阅读技巧,帮助开发者高效学习硬件设计语言。

a1b2c3d的博客 718

64、5G 侧链通信技术详解

本文详细解析了5G侧链通信的关键技术,包括资源感知与选择、UE间协调、混合ARQ、功率控制、信道探测与CSI报告以及侧链同步。资源感知与选择通过周期性或随机方式实现资源分配,UE间协调通过主动或被动方式避免资源冲突。混合ARQ机制确保数据传输可靠性,功率控制和信道探测优化传输质量并减少干扰。侧链同步则通过多种方式确保设备间时间一致性。这些技术相互配合,构建了高效稳定的5G侧链通信体系,适用于智能交通、物联网、应急通信等多个领域,为未来无线通信发展提供强大支撑。

oil88的博客 102

ZJCOJ L先生与质数V3/V4 (Meisell-Lehmer算法)

Problem L: L先生与质数V3/V4(应各位菊苣要求) Time Limit:1 Sec  Memory Limit: 128/16 MB Submit:298  Solved:65 [Submit][Status][WebBoard] Description 在解决了上一个质数问题之后,L先生依然不甘心,他还想计算下更多范围内的质数,你能帮助他吗?(没错

王小二的博客 617

【CASS精品教程】032:CASS11台阶画法案例大全

一、普通无边台阶 二、普通有边台阶 三、普通圆弧无边台阶 四、U型台阶 五、曲线U型台阶 六、L型台阶

智慧空间实验室 7467

ZJC-1489 L先生与质数V4 51Nod-1184 第N个素数 (大区间求素数个数模板+二分)

Description 在解决了上一个质数问题之后,L先生依然不甘心,他还想计算下更多范围内的质数,你能帮助他吗?(没错这题题面和V3一毛一样) Input 有多组测试例。(测试例数量<70) 每个测试例一行,输入一个数字n(0<n<=3000000),输入0表示结束。 Output 输出测试例编号和第N个质数。 Case X: Y Sample Input 1 2 3 4 10 100 0 Sample Output Case 1: 2 Case 2: 3 Case 3: 5 Case 4: 7 Case

yo_bc的博客 619

【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板

NPU(Neural Processing Unit) 是专门用于人工神经网络推理与训练的处理器,具备高并行、低功耗、低延迟等特点。它是边缘 AI、自动驾驶、智能摄像头、语音识别等场景中的关键硬件。

moton2017的博客 2253

C++ Qt6 qml CMakeLists.txt如何添加qrc文件

本文介绍了在Qt6项目中如何通过CMake管理QML图片资源。相比Qt5的qmake,CMake需要手动创建qrc文件并配置CMakeLists.txt。关键步骤包括:1)创建resources.qrc文件并添加图片资源;2)在CMakeLists.txt中设置CMAKE_AUTORCC为ON开启自动资源处理;3)使用qt_add_resources将qrc文件绑定到项目。配置完成后,可通过"qrc:alias"方式引用资源图片,解决了相对路径管理复杂的问题。

琅嬛福地 1454

脑语言2500单字v1.5.1

如果人和 AI 说同一种语言,文明会怎样?我用 2500 个单字试了试。2500个单字是不同领域、不同知识的共同体,无论你学编程或者是数学或写作,你都要用汉字,而常用的2500个汉字几乎可以涵盖不同行业做的不同事情。

脑语言 2012

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7608

求2~2000的所有素数.有足够的内存,要求尽量快

解答; #include<stdio.h> #include<stdbool.h> int a[2000]={2};//定义a来存储素数 static int count=1; bool adjust(int value) { int i; for(i=0;i<count;i++) { if(value==2)//如果输入的值...

ShawnWang1994的博客 1389

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2017 ACM-ICPC 亚洲区(青岛赛区)网络赛 HDU 6206 1001 Apple(三角形外接圆圆心和半径)

题意:给你三个点,保证不再同一条直线上,再给你一点,问你是否在这三个点形成的圆外。 思路:就是求出三个点外接圆的圆心和半径判断下。精度问题需要用Java大数。 已知三点坐标,求外接圆圆心坐标与半径。 a=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0*((x3-x1)*(y2

CillyB的博客 2238

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

之江学院2017ACM 校赛Problem D: qwb与神奇的序列(找规律 快速幂)

有一个序列,初始时只有两个数x和y,之后每次操作时,在原序列的任意两个相邻数之间插入这两个数的和,得到新序列。举例说明: 初始:1 2 操作1次:1 3 2 操作2次:1 4 3 5 2 …… 请问在操作n次之后,得到的序列的所有数之和是多少? Input 多组测试数据,处理到文件结束(测试例数量 输入为一行三个整数x,y,n,相邻两个数之间用单个空格隔开。(0

CillyB的博客 1757

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Libreoj #6165. 一道水题 (快速线性筛素数)

题意:求出能整除[1,n]中所有数的最小整数,对100000007取模。(注意是1e8+7!!!) 思路:首先用线性筛筛出[1,n]的所有素数,记为p[i]。答案是对每个p[i],求出最大的p[i]^k,满足p[i]^k 之前一直用的是一般的素数筛选法,在这会T,要用快速线性筛 代码: #include #include #include using namespace s

CillyB的博客 1578

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function (切比雪夫多项式)

题意: 思路:手算了几项,然后把n为6的那一行输到OEIS,就搜到了切比雪夫多项式。 然后百度第一类切比雪夫多项式是这个公式: 注意"!!"不是阶乘的阶乘,而是不超过n且与n具有相同奇偶性的所有正整数连乘积。 n分类讨论下,当n为偶数时m=2*k, n为奇数时m=2*k-1 还有注意下"!!"的约分,可能下面的比上面的大 代码: #include us

CillyB的博客 1454

51nod 1184 第N个质数(二分+大区间求素数模板)

第1个质数是2,第3个质数是5,给出一个数N,求第N个质数。 Input 输入1个数N(1 Output 输出第N个质数。 思路:二分套求素数个数模板。 代码: #include #include #include #include #include #include #include #include using namespace std; ty

CillyB的博客 1214

POJ 1811 Prime Test(判断大素数&求最小质因子)

题意:给你一个n(2 思路:板子。用Miller_Rabin算法进行素数判断。在用Pollard_rho分解因子。 代码: #include #include #include #include #include using namespace std; typedef long long ll; //************************************

CillyB的博客 974

hdoj 5685 Problem A(逆元)

问题是求区间积。可以预处理前缀积h[i],现在要求(h[b]/h[a-1])%mod, 所以需要用到逆元-->h[b]*(h[a-1]^-1)%mod. 这题求逆元的方法有很多,扩展gcd,费马小定理,线性求逆元。 方法一,扩展gcd: #include using namespace std; const int mod = 9973; const int maxn = 1

CillyB的博客 947

HDU 5901 Count primes(求1e11内素数个数模板)

板子: #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; using namespace std; const int N = 5e6 + 2; bool np[N]; int prime[N], pi

CillyB的博客 925

hdoj 5666 Segment(二进制优化乘法, gcd)

Segment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1555    Accepted Submission(s): 576 Problem Description     Silen August

CillyB的博客 805

qduoj 102 一道非常简单的数学题(构造)

题意:给你三角形的边长a, b, c和一个L, L可以用来加长边,问加L后能形成的最大面积为多少。 思路:根据海伦公式,可以看出,要使面积最大,就要让三条边竟可能相等,所以构造让他们差值最小即可。 代码: #include #include #include #include #include using namespace std; typedef long long ll

CillyB的博客 776
上一篇: CodeChef Protecting The Poison(贪心)
下一篇: 素数判断 Miller_Rabin算法-hoj1356和51nod1186质数检测V2
cillyb
博客等级 码龄11年 225粉丝 497原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值