邝斌的ACM模板(莫比乌斯反演)
来源:互联网 发布:it教育哪家好 编辑:程序博客网 时间:2024/06/05 12:02
本博客整理自邝斌的ACM模板
2.13、莫比乌斯反演
莫比乌斯反演公式:
则
莫比乌斯函数
另外一种更常用的形式:
在某一范围内: 则
线性筛法求解积性函数(莫比乌斯函数)
const int MAXN = 1000000;bool check[MAXN+10];int prime[MAXN+10];int mu[MAXN+10];void Moblus(){ memset(check,false,sizeof(check)); mu[1] = 1; int tot = 0; for(int i = 2; i <= MAXN; i++) { if( !check[i] ) { prime[tot++] = i; mu[i] = -1; } for(int j = 0; j < tot; j++) { if(i * prime[j] > MAXN) break; check[i * prime[j]] = true; if( i % prime[j] == 0) { mu[i * prime[j]] = 0; break; } else { mu[i * prime[j]] = -mu[i]; } } }}
例题:
BZOJ 2301
对于给出的 n 个询问,每次求有多少个数对(x,y),满足 a≤x≤b, c≤y≤d,且 gcd(x,y) = k,
gcd(x,y)函数为 x 和 y 的最大公约数。
1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000
const int MAXN = 100000;bool check[MAXN+10];int prime[MAXN+10];int mu[MAXN+10];void Moblus(){ memset(check,false,sizeof(check)); mu[1] = 1; int tot = 0; for(int i = 2; i <= MAXN; i++) { if( !check[i] ) { prime[tot++] = i; mu[i] = -1; } for(int j = 0; j < tot; j ++) { if( i * prime[j] > MAXN) break; check[i * prime[j]] = true; if( i % prime[j] == 0) { mu[i * prime[j]] = 0; break; } else { mu[i * prime[j]] = -mu[i]; } } }}int sum[MAXN+10];//找[1,n],[1,m]内互质的数的对数long long solve(int n,int m){ long long ans = 0; if(n > m)swap(n,m); for(int i = 1, la = 0; i <= n; i = la+1) { la = min(n/(n/i),m/(m/i)); ans += (long long)(sum[la] - sum[i-1])*(n/i)*(m/i); } return ans;}int main(){ Moblus(); sum[0] = 0; for(int i = 1; i <= MAXN; i++) sum[i] = sum[i-1] + mu[i]; int a,b,c,d,k; int T; scanf("%d",&T); while(T--) { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); long long ans = solve(b/k,d/k) - solve((a-1)/k,d/k) - solve(b/k,(c-1)/k) + solve((a-1)/k,(c-1)/k); printf("%lld\n",ans); } return 0;}
阅读全文
1 0
- 邝斌的ACM模板(莫比乌斯反演)
- 莫比乌斯反演 模板啊
- 莫比乌斯反演模板
- 莫比乌斯反演系数-模板
- 模板:莫比乌斯反演
- 【数论】(莫比乌斯反演)关于莫比乌斯反演的小结
- caioj1280【莫比乌斯反演模板题】GCD
- 二项式反演,莫比乌斯反演。
- 莫比乌斯反演的学习
- 莫比乌斯反演的学习
- 莫比乌斯反演的学习(HDU1695)
- 莫比乌斯反演的学习(HDU1695)
- [BZOJ2820]YY的GCD(莫比乌斯反演)
- 莫比乌斯反演(入门)
- bzoj2820(莫比乌斯反演)
- bzoj1101(莫比乌斯反演)
- bzoj3930(莫比乌斯反演)
- hdu6134-(莫比乌斯反演)
- 瀑布流的实现原理与实例
- 图的输入及其边的记录(邻接表)
- 我来看看
- JCIP阅读基础知识(2、3章)随笔
- jenkins 应用发布
- 邝斌的ACM模板(莫比乌斯反演)
- 选择排序
- Codeforces 851C
- WOJ1170-Sorting
- Linux(Cent OS7.2)下启动停止memcached方法及ps命令使用讲解
- spark rdd 和 DF 转换
- 51nod 1179 最大的最大公约数
- 括号操作符重载案例
- struts2之struts1和struts2的区别