BZOJ 4816 [Sdoi2017]数字表格
来源:互联网 发布:怎样看淘宝退款率 编辑:程序博客网 时间:2024/06/04 19:24
莫比乌斯反演
不妨设
考虑一个
然后上面那个就是区间内gcd为定值的计数,大力反演
也就是
用指数的整除只有根号段的性质来搞一下,指数相加等于底数相乘,即用
括号里的东西只跟
#include<cstdio>#include<algorithm>#define N 1000005#define MOD 1000000007using namespace std;namespace runzhe2000{ typedef long long ll; int f[N], f_inv[N], g[N], preg[N], preg_inv[N], mu[N], prime[N], notprime[N], pcnt; int fpow(int a, int b) { int r = 1; for(; b; b >>= 1) { if(b & 1) r = (ll) r * a % MOD; a = (ll) a * a % MOD; } return r; } void main() { f[1] = f_inv[1] = 1; for(int i = 2; i < N; i++) f[i] = (ll)(f[i-1] + f[i-2]) % MOD, f_inv[i] = fpow(f[i], MOD-2); mu[1] = 1; for(int i = 2; i < N; i++) { if(!notprime[i]) prime[++pcnt] = i, mu[i] = -1; for(int j = 1; j <= pcnt && prime[j] * i < N; j++) { notprime[prime[j] * i] = 1; if(i % prime[j] == 0) break; else mu[prime[j] * i] = - mu[i]; } } for(int i = 1; i < N; i++) g[i] = 1; for(int i = 1; i < N; i++) for(int j = i; j < N; j += i) { if(mu[j/i] == 1) g[j] = (ll) g[j] * f[i] % MOD; if(mu[j/i] == -1) g[j] = (ll) g[j] * f_inv[i] % MOD; } preg[0] = preg_inv[0] = 1; for(int i = 1; i < N; i++) preg[i] = (ll) preg[i-1] * g[i] % MOD, preg_inv[i] = fpow(preg[i], MOD-2); int T, n, m; scanf("%d",&T); for(; T--; ) { scanf("%d%d",&n,&m); int ans = 1; if(n > m) swap(n, m); for(int i = 1, j; i <= n; i = j + 1) { j = min(n/(n/i), m/(m/i)); j > n ? j = n : 0; ans = (ll) ans * fpow((ll)preg[j] * preg_inv[i-1] % MOD, (ll)(n/i)*(m/i)%(MOD-1)) % MOD; } printf("%d\n",ans); } }}int main(){ runzhe2000::main();}
0 0
- BZOJ 4816 [Sdoi2017]数字表格
- 4816: [Sdoi2017]数字表格
- bzoj 4816: [Sdoi2017]数字表格 莫比乌斯反演
- [莫比乌斯反演] BZOJ 4816 [Sdoi2017]数字表格
- BZOJ4816 [Sdoi2017]数字表格
- bzoj4816: [Sdoi2017]数字表格
- 【bzoj4816】[Sdoi2017]数字表格
- 【SDOI2017】数字表格
- [bzoj4816][SDOI2017]数字表格
- bzoj4816: [Sdoi2017]数字表格
- 【SDOI2017】数字表格
- BZOJ4816: [Sdoi2017]数字表格
- 【jzoj100006】【SDOI2017】【数字表格】【数论】
- [BZOJ4816][Sdoi2017]数字表格 数学
- [数论 反演]BZOJ4816 [Sdoi2017]数字表格
- [莫比乌斯反演] BZOJ4816: [Sdoi2017]数字表格
- [BZOJ4816][SDOI2017]数字表格(莫比乌斯反演)
- 【BZOJ 4816】【SDOI 2017】数字表格
- JAVA集合练习:斗地主发牌
- 【一】 数据结构之Vector
- 蓝桥杯 序列求和 java
- 2017 陕西省网络安全技术比赛 Writeup
- C#中的Attribute详解(上)
- BZOJ 4816 [Sdoi2017]数字表格
- 记一次分配虚拟内存的经历
- 数组中只出现一次的数字
- 1064. Complete Binary Search Tree (30)
- (转)一个百倍股的坠落:那个曾经满大街的ESPRIT是如何衰败的
- day69_oracle
- 对文件的访问控制
- ofbiz部署之平台部署安装及遇到的问题
- matlab bp神经网络预测(不好用的版本)