LOJ6235 区间素数个数(min_25筛)
题目链接:LOJ
题目大意:看到题目名字应该都知道是啥了吧。
$1\le N\le 10^{11}$。
阉割版 min_25 筛。发现答案实际上就是 min_25 筛中 $g(N,pl)$ 的值。(取次数 $k=0$ 即可)
在这里再写一遍式子。(用久了应该要背了)
$g(n,0)=n-1$
$g(n,j)=\begin{cases}g(n,j-1)&p_j^2>n\\g(n,j-1)-(g(\lfloor\dfrac{n}{p_j}\rfloor,j)-(j-1))&p_j^2\le n\end{cases}$
直接算即可。时间复杂度 $O(\frac{N^{3/4}}{\log N})$。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
ll n,w[maxn],g[maxn];
int sq,pri[maxn],pl,tot,id1[maxn],id2[maxn];
bool vis[maxn];
inline int id(ll x){return x<=sq?id1[x]:id2[n/x];}
void init(){
sq=sqrt(n);
FOR(i,,sq){
if(!vis[i]) pri[++pl]=i;
FOR(j,,pl){
if(i*pri[j]>sq) break;
vis[i*pri[j]]=true;
if(i%pri[j]==) break;
}
}
for(ll l=,r;l<=n;l=r+){
r=n/(n/l);
w[++tot]=n/l;
if(n/l<=sq) id1[n/l]=tot;
else id2[n/(n/l)]=tot;
g[tot]=w[tot]-;
}
}
void calc(){
FOR(i,,pl) FOR(j,,tot){
if((ll)pri[i]*pri[i]>w[j]) break;
g[j]-=g[id(w[j]/pri[i])]-(i-);
}
}
int main(){
scanf("%lld",&n);
init();
calc();
printf("%lld\n",g[id(n)]);
}
LOJ6235 区间素数个数(min_25筛)的更多相关文章
- LOJ.6235.区间素数个数(Min_25筛)
题目链接 \(Description\) 给定\(n\),求\(1\sim n\)中的素数个数. \(2\leq n\leq10^{11}\). \(Solution\) Min_25筛.只需要求出\ ...
- [LOJ6235]区间素数个数
题目大意: 给定$n(n\leq10^{11})$,求$\pi(n)$. 思路: 计算$\pi$函数有$O(n^{\frac23})$的Lehmer算法,这里考虑$O(\frac{n^{\frac34 ...
- 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 ...
- LightOj 1197 - Help Hanzo(分段筛选法 求区间素数个数)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b ( ...
- Prime Count 求大区间素数个数
http://acm.gdufe.edu.cn/Problem/read/id/1333 https://www.zhihu.com/question/29580448/answer/44874605
- Min_25筛 学习笔记
这儿只是一个简单说明/概括/总结. 原理见这: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushu ...
- 模板 - 数学 - 数论 - Min_25筛
终于知道发明者的正确的名字了,是Min_25,这个筛法速度为亚线性的\(O(\frac{n^{\frac{3}{4}}}{\log x})\),用于求解具有下面性质的积性函数的前缀和: 在 \(p\) ...
随机推荐
- c版基于链表的插入排序(改进版)
1. [代码][C/C++]代码 /** * @todo c版基于链表的插入排序 * @author Koma **/#include<stdio.h>#include<st ...
- hadoop启动时解决权限问题
解决以上问题,使用命令:sudo chown -hR jxh-ubuntu /usr/local/hadoop
- java:类集操作,多对多的关系
java:类集操作,多对多的关系 //一个课程有多个学生报名, //一个学生可以报名多个课程 demo.java, Student.java, Course.java' public class Co ...
- Django-02
知识预览 Ajax前戏:json Ajax简介 jquery实现的ajax JS实现的ajax 回到顶部 Ajax前戏:json 什么是json? 定义: JSON(JavaScript Object ...
- js string.format 方法
String.prototype.format = function(args) { var result = this; if (arguments.length > 0) { if (arg ...
- python实现Deque
1 Deque定义 deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变.deque 不同的地方是添加和删除项是非限制性的.可以在前面或后面添加新项 ...
- 【leetcode刷题笔记】Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- Gym - 100570C: Subrect Query (巧妙的单调队列)
De Prezer loves rectangles.He has a n × m rectangle which there is a number in each of its cells. We ...
- elasticsearch监控平台cerebro-0.8.3 相关操作
上面这个平台是cerebro-0.8.3 在github上找就有了 #################### GET /hnscan_source_o_comm_drv_bad_bhv_occur/ ...
- 51nod 1450 闯关游戏——期望dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 想了半天,不知道不能走的状态(即最后不足m个的状态)怎么办. ...