题目链接

  哇杜教筛超炫的

  有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤

  首先我们来看狄利克雷卷积是什么

  首先我们把定义域是整数,陪域是复数的函数叫做数论函数。

  然后狄利克雷卷积是个函数和函数的运算。

  比如说有两个数论函数f,g

  那么它们的狄利克雷卷积就是f*g,记为h

  然后我们惊奇地发现$h(i)=\sum\limits_{d|i}f(d)g(\frac{i}{d})$

  而且狄利克雷卷积好像是个群,然后它就能满足交换律结合律分配律balaba

  那么这个玩意有什么卵用呢?

  (显然它很有卵用)

  我们再说一个数论函数叫单位元。

  e(1)=1 e(n)=0(n>1)

  然后我们发现任意函数f(x)有f*e=f

  然后就引出我们的杜教筛,这里计算莫比乌斯函数的前缀和

  设$S(n)=\sum\limits_{i=1}^{n}miu(i)$

  然后我们随便代一个数论函数g,套上狄利克雷卷积

  $\sum\limits_{i=1}^{n}(g*miu)(i)=\sum\limits_{i=1}^{n}\sum\limits_{d|i}miu(\frac{i}{d})g(d)$

  $=\sum\limits_{d=1}^{n}\sum\limits_{d|i}miu(\frac{i}{d})g(d)$

  $=\sum\limits_{d=1}^{n}g(d)\sum\limits_{i=1}^{\frac{n}{d}}miu(i)$

  $=\sum\limits_{d=1}^{n}g(d)S(\frac{n}{d})$
  所以说$g(1)S(n)=\sum\limits_{i=1}^{n}g(i)S(\frac{n}{i})-\sum\limits_{i=2}^{n}g(i)S(\frac{n}{i})$

       $=\sum\limits_{i=1}^{n}(g*miu)(i)-\sum\limits_{i=2}^{n}g(i)S(\frac{n}{i})$

  然后我们惊奇的发现,如果我们设g(x)=1

  因为1*miu=e(因为有个定理是$\sum\limits_{d|n}miu(d)=$  n=1时1,n>1时0)

  那么这玩意就变成了$S(n)=1-\sum\limits_{i=2}^{n}S(\frac{n}{d})$

  然后这个玩意可以先用线性筛求出$n^\frac{2}{3}$的前缀和,然后用这个表达式应用数论分块,递归搞搞就好了

  就问炫不炫

  

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<map>
#define maxn 5000000
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int prime[maxn],tot;
bool s[maxn];
long long phi[maxn];
long long miu[maxn];
map<int,long long>_phi,_miu; long long calcmiu(long long n){
if(n<maxn) return miu[n];
if(_miu.count(n)) return _miu[n];
long long x=,ans=;
while(x<=n){
long long y=n/(n/x);
ans-=calcmiu(n/x)*(y-x+);
x=y+;
}
return _miu[n]=ans;
} long long calcphi(long long n){
if(n<maxn) return phi[n];
if(_phi.count(n)) return _phi[n];
long long x=,ans=n*(n+)/;
while(x<=n){
long long y=n/(n/x);
ans-=calcphi(n/x)*(y-x+);
x=y+;
}
return _phi[n]=ans;
} int main(){
int T=read();
s[]=;miu[]=;phi[]=;miu[]=;phi[]=;
for(int i=;i<maxn;++i){
if(!s[i]){
s[i]=;
phi[i]=i-;
miu[i]=-;
prime[++tot]=i;
}
for(int j=;j<=tot&&prime[j]*i<maxn;++j){
s[prime[j]*i]=;
if(i%prime[j]){
miu[i*prime[j]]=-miu[i];
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
else{
phi[i*prime[j]]=phi[i]*prime[j];
miu[i*prime[j]]=;
break;
}
}
}
for(int i=;i<maxn;++i){
phi[i]+=phi[i-];
miu[i]+=miu[i-];
}
while(T--){
long long n=read();
printf("%lld %lld\n",calcphi(n),calcmiu(n));
}
return ;
}

【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)的更多相关文章

  1. 中国剩余定理 & 欧拉函数 & 莫比乌斯反演 & 狄利克雷卷积 & 杜教筛

    ssplaysecond的博客(请使用VPN访问): 中国剩余定理: https://ssplaysecond.blogspot.jp/2017/04/blog-post_6.html 欧拉函数: h ...

  2. BZOJ3944: Sum(杜教筛模板)

    BZOJ3944: Sum(杜教筛模板) 题面描述 传送门 题目分析 求\(\sum_{i=1}^{n}\mu(i)\)和\(\sum_{i=1}^{n}\varphi(i)\) 数据范围线性不可做. ...

  3. P4213 【模板】杜教筛(Sum)(杜教筛)

    根据狄利克雷卷积的性质,可以在低于线性时间复杂度的情况下,求积性函数前缀和 公式 \[ 求\sum_{i=1}^{n}\mu(i) \] 因为\(\mu*I=\epsilon\) 所以设\(h=\mu ...

  4. 狄利克雷卷积&莫比乌斯反演总结

    狄利克雷卷积&莫比乌斯反演总结 Prepare 1.\([P]\)表示当\(P\)为真时\([P]\)为\(1\),否则为\(0\). 2.\(a|b\)指\(b\)被\(a\)整除. 3.一 ...

  5. HDU.5628.Clarke and math(狄利克雷卷积 快速幂)

    \(Description\) \[g(i)=\sum_{i_1|i}\sum_{i_2|i_1}\sum_{i_3|i_2}\cdots\sum_{i_k|i_{k-1}}f(i_k)\ mod\ ...

  6. BZOJ3601. 一个人的数论(狄利克雷卷积+高斯消元)及关于「前 $n$ 个正整数的 $k$ 次幂之和是关于 $n$ 的 $k+1$ 次多项式」的证明

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3601 题解 首先还是基本的推式子: \[\begin{aligned}f_d(n) &a ...

  7. codeforces757E. Bash Plays with Functions(狄利克雷卷积 积性函数)

    http://codeforces.com/contest/757/problem/E 题意 Sol 非常骚的一道题 首先把给的式子化一下,设$u = d$,那么$v = n / d$ $$f_r(n ...

  8. 狄利克雷卷积&莫比乌斯反演证明

    狄利克雷卷积简介 卷积这名字听起来挺学究的,今天学了之后发现其实挺朴实hhh. 卷积: "(n)"表示到n的一个范围. 设\(f,g\)是两个数论函数(也就是说,以自然数集为定义域 ...

  9. 狄利克雷卷积 & 莫比乌斯反演

    积性函数与完全积性函数 积性函数 若一个数论函数\(f\)满足当\(gcd(n,m)=1\)时,\(f(nm)=f(n)f(m)\) 则称\(f\)为积性函数 一些常见的积性函数 完全积性函数 若一个 ...

随机推荐

  1. UVA 11992 Fast Matrix Operations (降维)

    题意:对一个矩阵进行子矩阵操作. 元素最多有1e6个,树套树不好开(我不会),把二维坐标化成一维的,一个子矩阵操作分解成多条线段的操作. 一次操作的复杂度是RlogC,很容易找到极端的数据(OJ上实测 ...

  2. 查看nvidia的GPU

    nvidia-smi就可以查看,可以看到进程的占用率,可以kill杀掉进程 注意这里的-前后都不要空格,连起来写

  3. 爬虫遇到HTTP Error 403的问题

    # coding=gbk from bs4 import BeautifulSoup import requests import urllib x = 1 y = 1 def crawl(url): ...

  4. 使用CAShapeLayer实现复杂的View的遮罩效果

    一.案例演示 最近在整理一个聊天的项目的时候,发送图片的时候,会有一个三角的指向效果,指向这张图片的发送者.服务端返回给我们的图片只是一张矩形的图片,我们如何把一张矩形的图片或者View,加上一层自定 ...

  5. ReactiveCocoa入门-part2

    ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换 ...

  6. 性能优化之MySQL优化(慕课)

    MySQL数据库优化 1-1MySQL优化简介 数据库优化的目的 避免出现页面访问错误 由于数据库连接timeout产生5XX错误 由于慢查询造成页面无法加载 由于阻塞造成数据无法提交 增加数据库的稳 ...

  7. 洛谷 1571 眼红的Medusa

    洛谷 1571 眼红的Medusa 虽说这道题标签里写明了二分,然而我还是首先想到了map......毕竟map真的是简单好写. map做法 #include<bits/stdc++.h> ...

  8. JDBC-防止SQL注入问题

      String sql = "select * from user where name = '" + name + "' and password = '" ...

  9. Unity基础-发布

    PC BuildSetting File->BuildSetting Switch Platform Development Build是在调试模式下使用版本 Script Debugging调 ...

  10. 单例模式的几种实现-Java版

    目录 关键点 饿汉式 懒汉式 双检锁 静态内部类单例模式 枚举方式 关键点 私有化构造器 通过静态方法或枚举返回单例类对象 确保单例类对象只有一个,尤其在多线程环境下. 确保每个类被序列化不会重新创建 ...