杜教筛进阶+洲阁筛讲解+SPOJ divcnt3
Part 1:杜教筛进阶
在了解了杜教筛基本应用,如$\sum_{i=1}^n\varphi(i)$的求法后,我们看一些杜教筛较难的应用。
求$\sum_{i=1}^n\varphi(i)*i$
考虑把它与$id$函数狄利克雷卷积后的前缀和。
$$\sum_{i=1}^n\sum_{d|i}\varphi(d)*d*\frac id=\sum_{i=1}^ni^2$$枚举$T=\frac id$,原式化为
$$\sum_{T=1}^nT\sum_{d=1}^{\lfloor\frac nT\rfloor}\varphi(d)*d=\sum_{i=1}^ni^2$$移项,得
$$\sum_{i=1}^n\varphi(i)*i=\sum_{i=1}^ni^2-\sum_{T=2}^nT\sum_{d=1}^{\lfloor\frac nT\rfloor}\varphi(d)*d$$右边的$\sum_{d=1}^{\lfloor\frac nT\rfloor}\varphi(d)*d$递归求就行了。
总结:当遇到一些不好求前缀和的函数时,一般将其与一个易于求前缀和的函数进行狄利克雷卷积,得到另一个易于求前缀和的函数,然后通过简单的数学变换,得到可以递归的式子。
Part 2:洲阁筛讲解
有一篇博客讲的挺好:
http://debug18.com/posts/calculate-the-sum-of-multiplicative-function
Part 3:SPOJ divcnt3
洲阁筛的简单应用。
#include <cstdio>
#include <algorithm>
using namespace std; typedef long long ll;
const int N=316241,p=;
int T,e,tt,t2,pr[N],hd[p],nx[p],w[p],mx[N],ci[N],s[N],D[p];
ll n,a1,to[p],d[p],g[p],f[N],f2[p],sf[N];
void ins(int x,ll y) {int h=y%p; to[++e]=y,w[e]=x,nx[e]=hd[h],hd[h]=e;}
int qr(ll x) {for(int i=hd[x%p];i;i=nx[i]) if(to[i]==x) return w[i]; return ;} void sol() {
e=t2=;
for(ll i=;i<=n;i=n/(n/i)+) hd[n/i%p]=;
for(ll i=;i<=n;i=n/(n/i)+) ins(++t2,n/i),d[t2]=g[t2]=n/i,D[t2]=;
for(int i=;i<=tt;i++)
for(int j=;j<=t2&&(ll)pr[i]*pr[i]<=d[j];j++) {
int k=qr(d[j]/pr[i]); g[j]-=g[k]-(i--D[k]),D[j]=i;
}
}
void sol2() {
for(int i=;i<=t2;i++) f2[t2]=;
for(int i=tt;i;i--)
for(int j=;j<=t2&&(ll)pr[i]*pr[i]<=d[j];j++) {
if(pr[i+]>d[j]) f2[j]=;
else if((ll)pr[i+]*pr[i+]>d[j]) f2[j]=(s[min(N-1LL,d[j])]-s[pr[i+]-])*+;
for(ll pi=pr[i],c=;d[j]>=pi;pi*=pr[i],c++) {
ll k=d[j]/pi,k2;
if(pr[i+]>k) k2=;
else if((ll)pr[i+]*pr[i+]>k) k2=(s[min(N-1LL,k)]-s[pr[i+]-])*+;
else k2=f2[qr(k)];
f2[j]+=k2*(*c+);
}
}
} int main() {
scanf("%d",&T),f[]=sf[]=;
for(int i=;i<N;i++) {
s[i]=s[i-]+!f[i];
if(!f[i]) pr[++tt]=i,f[i]=,mx[i]=i,ci[i]=;
for(int j=,k;j<=tt&&(k=i*pr[j])<N;j++) {
if(i%pr[j]) f[k]=f[i]*,mx[k]=pr[j],ci[k]=;
else {f[k]=f[i/mx[i]]*(ci[i]*+),mx[k]=mx[i]*pr[j],ci[k]=ci[i]+; break;}
}
sf[i]=sf[i-]+f[i];
}
pr[tt+]=;
while(T--) {
scanf("%lld",&n);
if(n<N) {printf("%lld\n",sf[n]); continue;}
a1=,sol(),sol2();
for(int i=,r;i<N;i=r+) {
int j=qr(n/i); ll k;
if(pr[tt+]>n/i) k=;
else k=g[j]-(tt-D[j]);
a1+=(sf[r=min(N-1LL,n/(n/i))]-sf[i-])*(k-)*;
}
printf("%lld\n",a1+f2[]);
}
return ;
}
杜教筛进阶+洲阁筛讲解+SPOJ divcnt3的更多相关文章
- 【XSY3042】石像 拓扑排序 状压DP 洲阁筛
题目大意 有 \(n\) 个整数 \(a_1,a_2,\ldots,a_n\),每个数的范围是 \([1,m]\).还有 \(k\) 个限制,每个限制 \(x_i,y_i\) 表示 \(a_{x_i} ...
- 洲阁筛 & min_25筛学习笔记
洲阁筛 给定一个积性函数$F(n)$,求$\sum_{i = 1}^{n}F(n)$.并且$F(n)$满足在素数和素数次幂的时候易于计算. 显然有: $\sum_{i = 1}^{n} F(n) = ...
- 【Learning】积性函数前缀和——洲阁筛(min_25写法)
问题描述 洲阁筛解决的问题主要是\(n\)范围较大的积性函数前缀和. 已知一积性函数\(f(i)\),求\(\sum_{i=1}^nf(i)\). \(n\leq10^{12}\). 求解方法 如 ...
- 【learning】洲阁筛
问题描述 快速求素数处点值比较好求的积性函数前缀和 大致过程 Step1.求出一定范围内的素数处点值之和(\(g\)) Step2.利用上面的\(g\)求出一个\(f\)然后用\(f\)求出前缀和 具 ...
- 模板 - 洲阁筛 + min25筛
好像在某些情况下杜教筛会遇到瓶颈,先看着.暑假学一些和队友交错的知识的同时开这个大坑.
- [NOI2016]循环之美(杜教筛)
首先要求每个数互不相等,故有$x\perp y$. 可以发现$\frac{x}{y}$在$k$进制下为纯循环小数的充要条件为$x\cdot k^{len}\equiv x(mod\ y)$,即$y\p ...
- BZOJ 4805: 欧拉函数求和 杜教筛
https://www.lydsy.com/JudgeOnline/problem.php?id=4805 给出一个数字N,求sigma(phi(i)),1<=i<=N https://b ...
- 【知识总结】线性筛_杜教筛_Min25筛
首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...
- 一些求和式的估算 & 杜教筛时间复杂度证明
本文内容概要: \(A=\sum\limits_{i=1}^n\dfrac1{\sqrt i}=1+\dfrac1{\sqrt2}+\cdots+\dfrac1{\sqrt n}\) \(O(\sqr ...
随机推荐
- 过滤器Filter与监听器Listener
过滤器Filter 过滤器也是一种servlet 它也可以对用户的请求进行处理 , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...
- Java 多线程 从无到有
个人总结:望对屏幕对面的您有所帮助 一. 线程概述 进程: 有独立的内存控件和系统资源 应用程序的执行实例 启动当前电脑任务管理器:taskmgr 进程是程序(任务)的执行过程,它持有资源(共享内存, ...
- Vim 中文社区:期待你的加入
我们的愿景 Vim 中文社区一直比较零散,缺少凝聚力,现有的一些群经常也是水的可以的,讨论各种无关紧要的内容,于是导致很大一部分人,将这些群丢入了群助手,渐渐地他们也淡出了 vim 中文社区. 而我理 ...
- Mego开发文档 - 快速概述
Mego 快速概述 Mego 是一款轻量级,可扩展和跨平台的数据访问技术. Mego 是一个对象关系映射器(O / RM),它使.NET开发人员能够使用.NET对象处理数据库.它消除了开发人员通常需要 ...
- 新概念英语(1-63)Thank you, doctor.
新概念英语(1-63)Thank you, doctor. Who else is in bed today? why? A:How's Jimmy today? B:Better. Thank yo ...
- SQL执行计划分析
explain执行计划中的字段以及含义在下面的博客中有详细讲述: https://blog.csdn.net/da_guo_li/article/details/79008016 执行计划能告诉我们什 ...
- Python3安装Requests
安装Requests费了1天的时间,囧.终于还是在官网找到解决方法,可以参考这个http://docs.python-requests.org/en/latest/user/install/#inst ...
- mysql Access denied for user root@localhost错误解决方法
select * from user \G use mysql select * from user limit 1 \G update user set Host='%' where `User`= ...
- flash上传文件,如何解决跨域问题
今天同事遇到一个问题,我们有两个应用,一个后台应用,主要用于运营人员编辑文章,发布到官网:一个图片服务器应用,其他很多的应用上传的图片也会存放在这,还对外提供一些查询和管理api. 前者部署在back ...
- python 异常 反射
异常 反射 一.异常处理: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError ...