51nod 1675 序列变换 莫比乌斯反演(第二种形式)
来源:互联网 发布:淘宝专业术语大全 编辑:程序博客网 时间:2024/06/06 05:14
传送门:51nod 1675
题意:中文题。
思路:明明很像多校的一个题,还是简化版,而我愣是没想起来用莫比乌斯反演。。
这题用的是莫比乌斯反演的第二种转化形式:
设f[i]为最大公因数为i时的计数
F[i]为公因数包含i的时候的计数
显然满足第一个式子,因此我们就可以转化成二个式子求出f[1].
代码:
#include<stdio.h>#include<bits/stdc++.h>#define MAXN 100010using namespace std;int a[MAXN], b[MAXN], cnt[MAXN], mu[MAXN];long long F[MAXN];void mobius(int n) { mu[1]=1; for(int i=1;i<=n;i++) for(int j=i+i;j<=n;j+=i) mu[j]-=mu[i];} int main(){int n;long long ans = 0;scanf("%d", &n);mobius(n);for(int i = 1; i <= n; i++)scanf("%d", a + i);for(int i = 1; i <= n; i++)scanf("%d", b + i);for(int i = 1; i <= n; i++){for(int j = i; j <= n; j += i) cnt[a[b[j]]]++;for(int j = i; j <= n; j += i) F[i] += cnt[b[a[j]]];//将a[b[x]] == b[a[y]]的pair数量加到F[i]里(gcd(x, y) == i) for(int j = i; j <= n; j += i) cnt[a[b[j]]] = 0;}for(int i = 1; i <= n; i++) ans += mu[i] * F[i];//莫比乌斯反演求得f[1]cout << ans << endl; return 0;}
阅读全文
0 0
- 51nod 1675 序列变换 莫比乌斯反演(第二种形式)
- 51nod 1675 序列变换 莫比乌斯反演
- 51nod 1675 序列变换 莫比乌斯反演
- 51nod 1675 序列变换(莫比乌斯反演)
- 51nod 欢乐手速场1(迎新春)-B序列变换(莫比乌斯反演)
- 51Nod 1675 莫比乌斯反演
- 51nod 1675 序列变换 (简单莫比乌斯)
- 莫比乌斯反演 两种形式
- 51nod 序列变换 [容斥原理+莫比乌斯函数]【数论+组合数学】
- 第二类莫比乌斯反演
- 莫比乌斯反演定理证明(两种形式)
- 51nod 1190 最小公倍数之和 V2(莫比乌斯反演)
- [莫比乌斯反演 积性函数前缀和] 51Nod 1190 最小公倍数之和 V2
- 51nod 1190 最小公倍数之和 V2(莫比乌斯反演)
- [莫比乌斯反演 复杂度分析] 51Nod 1222 最小公倍数计数
- [莫比乌斯反演] 51Nod 1584 加权约数和
- 51nod 1355 斐波那契的最小公倍数 (数论+莫比乌斯反演)
- 51nod 1192 Gcd表中的质数 莫比乌斯反演
- Java开发工具包下载安装和配置
- MPC8309 USB OTG功能调试
- jquery遍历json的方法
- ios 适配
- 深度学习(二)-----传统神经网络
- 51nod 1675 序列变换 莫比乌斯反演(第二种形式)
- Linux 命令行使用技巧整理
- 清华大学2006年机试-最大序列和-1077
- Java 基础操作库 hoe 使用介绍
- STM8S105系列单片机管脚复用后不再支持正常功能使用
- C++学习之路 day3
- java.lang.IllegalStateException: BeanFactory not initialized or already closed
- 在虚拟机Centos7上安装Oracle重启机器,用root登录报Module is Unknown的解决方法
- 区块链ICO的红与黑