bzoj 4816: [Sdoi2017]数字表格 莫比乌斯反演
来源:互联网 发布:mathtype 矩阵虚线 编辑:程序博客网 时间:2024/05/24 07:21
题意
定义fibonacci数列。用
有一个
答案对
对
分析
一开始推公式的时候习惯性地写了
我们设n<=m,显然
设
通过简单的反演可以得到
显然有
把上面两条式子合并在一起
设
然后就大功告成啦!
注意到对于那两个下去整,可以将
那么我们只要O(nlogn)预处理出括号内那部分的前缀积,每次快速幂即可。
时间复杂度
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int N=1000005;const int MOD=1000000007;int tot,prime[N],f[N],s[N],ny[N],mu[N];bool not_prime[N];int ksm(int x,int y){ int ans=1; while (y) { if (y&1) ans=(LL)ans*x%MOD; x=(LL)x*x%MOD;y>>=1; } return ans;}void prework(int n){ mu[1]=1; for (int i=2;i<=n;i++) { if (!not_prime[i]) prime[++tot]=i,mu[i]=-1; for (int 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; break; } mu[i*prime[j]]=-mu[i]; } } f[0]=0;f[1]=1; ny[0]=ny[1]=1; for (int i=2;i<=n;i++) f[i]=(f[i-1]+f[i-2])%MOD,ny[i]=ksm(f[i],MOD-2); for (int i=1;i<=n;i++) s[i]=1; for (int i=1;i<=n;i++) for (int j=i;j<=n;j+=i) if (mu[j/i]==1) s[j]=(LL)s[j]*f[i]%MOD; else if (mu[j/i]==-1) s[j]=(LL)s[j]*ny[i]%MOD; for (int i=2;i<=n;i++) s[i]=(LL)s[i]*s[i-1]%MOD,ny[i]=ksm(s[i],MOD-2);}int solve(int n,int m){ if (n>m) swap(n,m); int ans=1; for (int i=1,last;i<=n;i=last+1) { last=min(n/(n/i),m/(m/i)); ans=(LL)ans*ksm((LL)s[last]*ny[i-1]%MOD,(LL)(n/i)*(m/i)%(MOD-1))%MOD; } return (ans+MOD)%MOD;}int main(){ prework(1000000); int T; scanf("%d",&T); while (T--) { int n,m; scanf("%d%d",&n,&m); printf("%d\n",solve(n,m)); }}
0 0
- bzoj 4816: [Sdoi2017]数字表格 莫比乌斯反演
- [莫比乌斯反演] BZOJ 4816 [Sdoi2017]数字表格
- [莫比乌斯反演] BZOJ4816: [Sdoi2017]数字表格
- [BZOJ4816][SDOI2017]数字表格(莫比乌斯反演)
- [数论][莫比乌斯反演] BZOJ 4816: 数字表格
- LOj 2000「SDOI2017」数字表格 (莫比乌斯反演)
- BZOJ 4816 [Sdoi2017]数字表格
- 【BZOJ】【P2154】【Crash的数字表格】【题解】【莫比乌斯反演】
- BZOJ 2154 Crash的数字表格 莫比乌斯反演
- HYSBZ/BZOJ 2154 Crash的数字表格 - 莫比乌斯反演
- BZOJ-2154 && 2693 Crash的数字表格&&jzptab 莫比乌斯反演
- 【bzoj 2154】Crash的数字表格(莫比乌斯反演)
- BZOJ 2154(Crash的数字表格-莫比乌斯反演)
- BZOJ 2154 Crash的数字表格(sigma(lcm(i,j)),莫比乌斯反演)
- [莫比乌斯反演] BZOJ 2154 Crash的数字表格
- BZOJ 2154 Crash的数字表格(莫比乌斯反演)
- bzoj 2154: Crash的数字表格 莫比乌斯反演
- 【BZOJ 2154】Crash的数字表格 莫比乌斯反演
- nslookup用法
- 解决Github访问超慢问题
- Android 开发之轻量级文本动画
- 让你的App有声音
- go_spider 简单爬虫实现
- bzoj 4816: [Sdoi2017]数字表格 莫比乌斯反演
- svn
- Linux中rz/sz使用介绍
- 也谈谈 Redis 和 Memcached 的区别
- java读写Excel(JXL)
- csdn博客开通了
- 加载Selenium2Library却显示红色
- android 屏幕适配
- 553 mail from must equal authorized user