LOJ.6235.区间素数个数(Min_25筛)
\(Description\)
给定\(n\),求\(1\sim n\)中的素数个数。
\(2\leq n\leq10^{11}\)。
\(Solution\)
Min_25筛。只需要求出\(g(n,|P|)\)。
跑的好慢啊QAQ
//5283ms 11.62M
#include <cmath>
#include <cstdio>
#include <algorithm>
typedef long long LL;
const int N=317000<<1;
int cnt,P[N>>2],id1[N],id2[N];
LL g[N],w[N];
bool notP[N];
void Init(int n)
{
notP[1]=1;
for(int i=2; i<=n; ++i)
{
if(!notP[i]) P[++cnt]=i;
for(int j=1; j<=cnt&&i*P[j]<=n; ++j)
if(notP[i*P[j]]=1,!(i%P[j])) break;
}
}
int main()
{
LL n; scanf("%lld",&n);
int m=0,Sqr=sqrt(n+0.5); Init(Sqr);
for(LL i=1,j; i<=n; i=j+1)
{
w[++m]=n/i, j=n/w[m];
if(w[m]<=Sqr) id1[w[m]]=m;
else id2[j]=m;
g[m]=w[m]-1;
}
w[m+1]=-1;
for(int j=1; j<=cnt; ++j)
{
int pj=P[j]; LL lim=1ll*pj*pj;
for(int i=1; lim<=w[i]; ++i)
{
int k=w[i]/pj<=Sqr?id1[w[i]/pj]:id2[n/(w[i]/pj)];
g[i]-=g[k]-j+1;
}
}
printf("%lld\n",g[1]);
return 0;
}
#include<cstdio>
#include<math.h>
#define ll long long
const int N = 316300;
ll n, g[N<<1], a[N<<1];
int id, cnt, sn, prime[N];
inline int Id(ll x){ return x<=sn?x:id-n/x+1;}
int main() {
scanf("%lld", &n), sn=sqrt(n);
for(ll i=1; i<=n; i=a[id]+1) a[++id]=n/(n/i), g[id]=a[id]-1;
for(int i=2; i<=sn; ++i) if(g[i]!=g[i-1]){
// 这里 i 必然是质数,因为 g[] 是前缀质数个数
// 当 <i 的质数的倍数都被筛去,让 g[] 发生改变的位置只能是下一个质数
// 别忘了 i<=sn 时,ID(i) 就是 i。
prime[++cnt]=i;
ll sq=(ll)i*i;
for(int j=id; a[j]>=sq; --j) g[j]-=g[Id(a[j]/i)]-(cnt-1);
}
return printf("%lld\n", g[id]), 0;
}
LOJ.6235.区间素数个数(Min_25筛)的更多相关文章
- loj#6235. 区间素数个数(min25筛)
题意 题目链接 Sol min25筛的板子题,直接筛出\(g(N, \infty)\)即可 筛的时候有很多trick,比如只存\(\frac{N}{x}\)的值,第二维可以滚动数组滚动掉 #inclu ...
- loj #6235. 区间素数个数
#6235. 区间素数个数 题目描述 求 1∼n 1\sim n1∼n 之间素数个数. 输入格式 一行一个数 n nn . 输出格式 一行一个数,表示答案. 样例 样例输入 10 样例输出 4 样例解 ...
- loj #6235. 区间素数个数 min_12.5筛
\(\color{#0066ff}{ 题目描述 }\) 求 \(1\sim n\) 之间素数个数. \(\color{#0066ff}{输入格式}\) 一行一个数 n . \(\color{#0066 ...
- LOJ6235 区间素数个数(min_25筛)
题目链接:LOJ 题目大意:看到题目名字应该都知道是啥了吧. $1\le N\le 10^{11}$. 阉割版 min_25 筛.发现答案实际上就是 min_25 筛中 $g(N,pl)$ 的值.(取 ...
- LightOj 1197 - Help Hanzo(分段筛选法 求区间素数个数)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b ( ...
- LOJ #6202. 叶氏筛法(min_25 筛)
题意 求 \([L, R]\) 之间的素数之和 . \(L≤10^{10},2×10^{10} \le R \le 10^{11}\) 题解 一个有点裸的 min_25筛 ? 现在我只会筛素数的前缀和 ...
- LOJ 6053 简单的函数——min_25筛
题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...
- LOJ.6053.简单的函数(Min_25筛)
题目链接 Min_25筛见这里: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushuyu/p/91 ...
- loj 6053 简单的函数 —— min_25筛
题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...
随机推荐
- 从xtrabackup备份恢复单表
目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...
- C++ Primer 笔记——标准库类型string
1.如果使用等号初始化一个变量,实际上执行的是拷贝初始化,编译器吧等号右侧的初始值拷贝到新创建的对象中去:如果不使用等号则执行的是直接初始化. std::string str = "Test ...
- ConfigurationManager 类的使用
一.引用 命名空间: System.Configuration程序集: System.Configuration(位于 System.Configuration.dll) 二.示例 1.读取.增 ...
- HTTP协议请求头信息和响应头信息
阅读目录 http的请求部分 常用请头信息 常用响应头信息 http的请求部分 基本结构 请求行 GET /test/hello.html HTTP/1.1 消息头(并不是每一次请求都一样) 空行 ...
- bootstrap 三个文件的引入
<!-- 新 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="//cdn.bootcss.co ...
- 【Leetcode | 5】求和问题
一.1两数之和 二.15三数之和 C++ Soution 1: class Solution { public: vector<vector<int>> threeSum(ve ...
- Android.os.SystemClock
https://www.linuxidc.com/Linux/2011-11/48325p2.htm 文档中对System.currentTimeMillis()进行了相应的描述,就是说它不适合用在需 ...
- Exception in thread "main" java.lang.NullPointerException
1.在window操作系统上,使用eclipse开发工具从hdfs分布式文件系统上下载文件报空指针异常解决方法: log4j:WARN No appenders could be found for ...
- 关于mac远程链接window服务器以及实现共享文件
要最近换了新电脑mac 虽然运行速度666 但是真的很多地方都使用不习惯 这里记录一下 关于 远程链接window主机的问题 方便以后用 首先是 链接: 在应用里 找到 然后类似于 wind ...
- 移动端iscroll实现日期选择
哎,说多了都是泪: 引入相关JS文件 <script type="text/javascript" src="js/jquery-1.9.1.min.js" ...