Min_25 筛 学习笔记
原文链接https://www.cnblogs.com/zhouzhendong/p/Min-25.html
前置技能
埃氏筛法
整除分块(这里有提到)
本文概要
1. 问题模型
2. Min_25 筛
3. 模板题以及模板代码
问题模型
有一个积性函数 $f$ ,对于所有质数 $p$,$f(p)$ 是关于 $p$ 的多项式,$f(p^k)$ 非常容易计算(不一定是关于 p 的多项式)。
求
$$\sum_{i=1}^{n} f(i)$$
$n\leq 10^{10}$
${\rm Time\ Limit} = 1s$
Min_25 筛
设集合 $P$ 表示素数集合。
设
$$g_{n,m} = \sum_{2\leq i\leq n, \forall p\in P\ and\ p\leq m,p\nmid i} f(i)$$
则假设 $p\in P$。
$$g(n,m) = \sum_{m<p\leq \sqrt n ,p^e\leq n,e\geq 1} f(p^e) \left([e>1] + \sum_{2\leq x \leq \lfloor \frac n {p^e} \rfloor, \forall p'\in P\ and\ p'\leq p ,p'\nmid x}f(x)\right)+\sum_{m<p\leq n} f(p)$$
设
$$h(n) = \sum_{1\leq p\leq n} f(p)$$
则
$$g(n,m)=\sum_{m<p\leq \sqrt n ,p^e\leq n,e\geq 1} f(p^e) \left([e>1] + g(\lfloor \frac n {p^e} \rfloor,p)\right)+h(n)-h(m)$$
(以上公式以及下图摘自 集训队论文2018 - 朱震霆 - 一些特殊的数论函数求和问题)
接下来我们考虑如何求 $h(x)$ 。
时间复杂度积分算一算就可以知道是 $O(\frac {n^{\frac 3 4}}{\log n})$。
在求 $g(n,m)$ 的直接爆搜就好了,连记忆化都不用!(但这个我不会证明,为什么是对的自己看论文)
具体代码实现主要参见模板部分。
模板题以及模板代码
51Nod1222 最小公倍数计数
题意
给定 $a,b$, 求
$$\sum_{n=a}^b \sum_{i=1}^n \sum_{j=1}^i [{\rm lcm } (i,j) = n]$$
$$a,b\leq 10^{11}$$
$${\rm Time \ Limit } = 6s$$
题解
先差分一下,转化成求前缀和。
先把原题的统计无序数对转化成统计有序数对,最终 $ans' = (ans+n)/2$ 即可。
设集合 $P$ 表示素数集合。
设 $c(n,p)$ 表示最大的使得 $p^{c(n,p)}|n$ 的数。
若 ${\rm lcm } (i,j) = n$ ,则
$$\forall p \in P, c(n,p)=\max(c(i,p),c(j,p))$$
所以,$\forall p\in P$ ,$c(i,p)$ 和 $c(j,p)$ 共有 $2c(n,p) +1 $ 种取值方法。
所以,设
$$n=\prod_i p_i^{k_i} (p_i\in P)$$
则
$$ \sum_{i=1}^n \sum_{j=1}^i [{\rm lcm } (i,j) = n] = \prod_t (2k_t+1) $$
显然这个式子满足 Min_25 筛的条件,直接筛就好了。
关于本题,还有一些其他做法,详见https://www.cnblogs.com/zhouzhendong/p/51Nod1222.html
代码
#pragma GCC optimize("Ofast","inline")
#include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof (x))
using namespace std;
typedef long long LL;
LL read(){
LL x=0,f=0;
char ch=getchar();
while (!isdigit(ch))
f|=ch=='-',ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}
const int Base=1000005,N=Base*2+5;
LL n,cn,a,b,base;
LL h[N],ps[N],cnt;
LL p[N],pcnt;
#define ID(i) ((i)<=base?i:cnt-cn/(i)+1)
LL f(int e){
return e*2+1;
}
LL g(LL n,LL m){
LL ans=max(0LL,h[ID(n)]-h[ID(p[m-1])]);
for (int i=m;i<=pcnt&&p[i]*p[i]<=n;i++){
LL nn=n/p[i];
for (int e=1;nn>0;e++,nn/=p[i])
ans+=f(e)*((e>1)+g(nn,i+1));
}
return ans;
}
LL _solve(LL _n){
cn=n=_n,base=(LL)sqrt(n),cnt=pcnt=0;
for (LL i=1;i<=n;i=ps[cnt]+1)
ps[++cnt]=n/(n/i),h[cnt]=ps[cnt]-1;
p[0]=1;
for (LL i=2;i<=base;i++)
if (h[i]!=h[i-1]){
p[++pcnt]=i;//顺便把质数筛出来
LL i2=i*i;
for (LL j=cnt;ps[j]>=i2;j--)
h[j]-=h[ID(ps[j]/i)]-(pcnt-1);
}
for (LL i=1;i<=cnt;i++)
h[i]*=3;
return g(n,1)+1;
}
LL solve(LL n){
return (_solve(n)+n)/2;
}
int main(){
a=read(),b=read();
cout<<solve(b)-solve(a-1)<<endl;
return 0;
}
Min_25 筛 学习笔记的更多相关文章
- Min_25筛 学习笔记
这儿只是一个简单说明/概括/总结. 原理见这: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushu ...
- min_25筛学习笔记【待填坑】
看见ntf和pb两位大佬都来学了,然后就不自觉的来学了. 我们考虑这样一个问题. $$ans=\sum_{i=1}^nf(i)$$其中$1\leq n\leq 10^{10}$ 其中$f(i)$是一个 ...
- 洲阁筛 & min_25筛学习笔记
洲阁筛 给定一个积性函数$F(n)$,求$\sum_{i = 1}^{n}F(n)$.并且$F(n)$满足在素数和素数次幂的时候易于计算. 显然有: $\sum_{i = 1}^{n} F(n) = ...
- Min_25筛学习笔记
感觉好好用啊 Luogu上的杜教筛模版题一发 Min_25抢到了 rank1 $ Updated \ on 11.29 $被 STO txc ORZ踩爆啦 前言 $ Min$_$25$筛可以求积性函数 ...
- $Min\_25$筛学习笔记
\(Min\_25\)筛学习笔记 这种神仙东西不写点东西一下就忘了QAQ 资料和代码出处 资料2 资料3 打死我也不承认参考了yyb的 \(Min\_25\)筛可以干嘛?下文中未特殊说明\(P\)均指 ...
- Powerful Number 筛学习笔记
Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...
- Min_25筛 学习小记
前言 为什么叫学习小记呢?因为暂时除了模板题就没有做其他的东西了.(雾 这个东西折磨了我一整天,看得我身不如死,只好结合代码理解题解,差点死在机房.(话说半天综合半天竞赛真是害人不浅) 为了以后忘了再 ...
- min-25筛学习笔记
Min_25筛简介 \(\text{min_25}\)筛是一种处理一类积性函数前缀和的算法. 其中这类函数\(f(x)\)要满足\(\sum_{i=1}^{n}[i\in prime]\cdot f( ...
- min_25 筛学习小记
min_25筛 由 dalao min_25 发明的筛子,据说时间复杂度是极其优秀的 \(O(\frac {n^{\frac 3 4}} {\log n})\),常数还小. 1. 质数 \(k\) 次 ...
随机推荐
- POJ 3666 Making the Grade (动态规划)
Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...
- 第五周博客作业<西北师范大学|李晓婷>
1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.作业要求链接:https://www.cnblogs.com/nwnu-daizh/p/10527959.htm ...
- tensorflow Pipeline 之TextLineReader 和decode_csv多分割替代方案
1.TextLineReader reader = tf.TextLineReader() key, value = reader.read(filename_queue) record_defaul ...
- [译]Ocelot - Service Discovery
原文 你可以指定一个service discovery provider,ocelot将使用它来找下游的host和port. Consul 下面的配置要放在GlobalConfiguration中.如 ...
- rcu-bp关键代码解读
1 什么是TLS 原理在网上资料很多,这里不展开. 简单点说,动态申请的每线程变量.有一类比较熟悉的每线程变量是一个带__thread的每线程变量,两者的区别在于,TLS这类每线程变量是动态 ...
- jar包中File 文件找不到的异常分析与解决
源链接: http://hxraid.iteye.com/blog/483115#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会 ...
- webpack之proxyTable设置跨域
可以看看这个视频中的介绍 :https://ke.qq.com/course/350693?tuin=f158ed6
- Git首次配置
用户身份配置 安装好Git后的第一步是设置用户名和电子邮件地址.这一步是很重要的,因为以后这将作为你每一次提交的个人信息,写入所创建的提交中,不可更改. git config --global use ...
- java 中final关键字
1.final变量,一旦该变量被设定,就不可以再改变该变量的值. final关键字定义的变量必须声明时赋值.一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,一个既是static和fina ...
- npx命令介绍
什么是npx 第一次看到npx命令是在 babel 的文档里 Note: If you do not have a package.json, create one before installing ...