杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】
下图给出杜教筛详细推导过程,前置知识有积性函数和莫比乌斯反演。
杜教筛是一种优秀的求积性函数前缀和算法,其时间复杂度受预处理数组的影响,一般开到2/3次幂大小,可使复杂度达到较为优秀的程度。
杜教筛的时间复杂度还要取决于预处理数组的大小,将预处理前缀和数组处理到n^(2/3)大小会使杜教筛时间复杂度缩短至 O(n^(2/3)) ,否则会超时
【模板】杜教筛(Sum) - 洛谷
# include<iostream>
# include<map>
# include<unordered_map>
# include<math.h>
using namespace std;
typedef long long int ll;unordered_map<int,int>m;const int N=1664503;int tot;
int prime[N+10];
ll mu[N+10];
bool not_prime[N+10];
ll phi[N+10];
unordered_map<ll,ll>sum_mu;
unordered_map<ll,ll>sum_phi;inline void init(int n)
{mu[1]=1;phi[1]=1;for(ll i=2; i<=n; i++){if(!not_prime[i]){tot++;prime[tot]=i;phi[i]=i-1;mu[i]=-1;}for(ll j=1; j<=tot&&i*prime[j]<=N; j++){not_prime[i*prime[j]]=1;if(i%prime[j]==0){mu[i*prime[j]]=0;phi[i*prime[j]]=phi[i]*prime[j];break;}mu[i*prime[j]]=-mu[i];phi[i*prime[j]]=phi[i]*(prime[j]-1);}}for(int i=1;i<=n;i++){mu[i]+=mu[i-1];phi[i]+=phi[i-1];}
}inline int g_sum(int x)
{return x;}inline int getsum_mu(int x)
{if(x<=N)return mu[x];if(sum_mu[x])return sum_mu[x];ll ans=1;for(ll l=2,r;l<=x;l=r+1){r=x/(x/l);ans-=(g_sum(r)-g_sum(l-1))*getsum_mu(x/l);}return sum_mu[x]=ans/g_sum(1ll);}
inline ll getsum_phi(ll x)
{if(x<=N)return phi[x];if(sum_phi[x])return sum_phi[x];ll ans=(ll)x*(ll)(x+1)/2;for(ll l=2,r;l<=x;l=r+1){r=x/(x/l);ans-=(g_sum(r)-g_sum(l-1))*getsum_phi(x/l);}return sum_phi[x]=ans/g_sum(1ll);
}
int main ()
{init(N);int t;cin>>t;while(t--){ll n;cin>>n;cout<<getsum_phi(n)<<" "<<getsum_mu(n)<<'\n';}return 0;}
杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】相关推荐
- 杜教筛 (包括线筛) 莫比乌斯函数前缀和 欧拉函数前缀和 因数和函数前缀和 因子个数前缀和 ( 分析 )...
对于莫比乌斯函数 和 欧拉函数 小于 1e8差不多都可线筛 1e12以内 杜教筛 代码针对洛古 p4213 n<=(1<<31)-1 杜教筛 #include< ...
- P3768 简单的数学题 [狄利克雷卷积,杜教筛,莫比乌斯反演]
简单的数学题 题目连接 https://www.luogu.org/problemnew/show/P3768 题目描述 输入一个正整数n,n≤1010n,n\le 10^{10}n,n≤1010和p ...
- 欧拉函数phi值的计算模板
求小于n且与n互质的整数的个数.告诉你n的唯一分解式 我们可以运用容斥原理,先分别减去是p1,p2,p3..pn的倍数,再加上同时是他们素因子的个数,再减去3个--以此类推即可. 我们可以化简一下公式 ...
- 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...
- Loj #572. 「LibreOJ Round #11」Misaka Network 与求和(莫比乌斯反演 + 杜教筛 + min_25筛(递推版))
直接反演一下:∑i=1n∑i=1nf(gcd(i,j))k\sum_{i = 1}^n\sum_{i = 1}^nf(gcd(i,j))^ki=1∑ni=1∑nf(gcd(i,j))k=∑d=1n ...
- 杜教筛及其时间复杂度分析
文章目录 杜教筛 方法 举例 莫比乌斯函数 欧拉函数 时间复杂度 杜教筛 杜教筛用于求一类积性函数的前缀和,时间复杂度可以做到 O(n23)O(n^{\frac{2}{3}})O(n32). 方法 ...
- [51NOD1847]奇怪的数学题(杜教筛+min_25筛+第二类斯特林数)
f(x)f(x)f(x)表示xxx的次大约数,有f(x)=xx的最小质因数f(x)=\frac{x}{x的最小质因数}f(x)=x的最小质因数x,那么 ∑i=1n∑j=1nsgcd(i,j)k=∑i ...
- bzoj 3944: Sum 杜教筛
本来以为这种东西只能O(N)线性筛,但是大千世界,无(sang)奇(xin)不(bing)有(kuang),确实存在更快的算法. 省选的时候rzz讲这种东西在国内OI称为杜教筛,用来求数论函数的前缀和 ...
- [LOJ]#572. 「LibreOJ Round #11」Misaka Network 与求和 min_25筛+杜教筛
Solution 推一下式子,容易得到一个线性做法:∑d=1nfk(d)((2∑i=1⌊ni⌋φ(i))−1)\sum_{d=1}^nf^k(d)((2\sum_{i=1}^{\lfloor{n\ov ...
最新文章
- [Java基础]Collections概述和使用
- wireshark抓包工具的使用及分析
- 从蜜罐新技术看欺骗防御发展走向
- [crypto][ipsec] 简述ESP协议的sequence number机制
- impdb导入oracle,impdp导入.dmp到oracle
- www,android18x.com,Android 11 LineageOS 18.1系统
- SpringMvc-HandlerExceptionResolver
- Bailian4121 股票买卖【最值】
- 微信公号“架构师之路”学习笔记(三)-MQ消息可达性_幂等性_延时性架构设计(应用场景、可靠投递、流量冲击)
- 安全狗云备份爆笑段子~~~如果上天再给我一次机会
- 计算机虚拟技术有那么难吗,价值在哪里?
- php 做圆形头像,php制作圆形用户头像方法
- RGB转YCbCr422_BT709颜色空间转换仿真
- 启发式算法(heuristic algorithm)中的启发式(heuristic)到底是什么意思?
- android7工程自测模式,工程模式测试
- 供应链金融(Supply Chain Finance)
- PyCharm2017破解教程
- 关于前端后台管理系统总结
- 大数据破获网售假耐克案
- 华为鸿蒙P10plus,华为P10 Plus全面评测 华为P10 Plus值不值得买