bzoj 4816: [Sdoi2017]数字表格【莫比乌斯反演+逆元】
把题意简化,就是要求
\]
把幂用莫比乌斯反演转化,得到
\]
然后枚举q=dk
\]
用枚举因数的方法处理出\( f[d]^{\mu(\frac{q}{d})} \),根据调和级数,复杂度为\( O(nlog_2n) \),然后处理询问的时候分块,复杂度为\( O(\sqrt{n}+\sqrt{m}) \)
因为用了\( O(nlog_2n) \)的粗暴逆元求法,所以跑的比较慢…是可以线性求的。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long N=1000005,mod=1e9+7;
int T,n,m,mb[N],p[N],tot;
long long f[N],t[N],invf[N],s[N],invs[N],ans;
bool v[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
long long inv(long long x)
{//cout<<x<<endl;
return x==1?1:(mod-mod/x)*inv(mod%x)%mod;
}
long long ksm(long long a,long long b)
{
long long r=1ll;
while(b)
{
if(b&1)
r=r*a%mod;
a=a*a%mod;
b>>=1;
}
return r;
}
int main()
{
T=read();
mb[1]=1;
for(int i=2;i<=1000000;i++)
{
if(!v[i])
{
p[++tot]=i;
mb[i]=-1;
}
for(int j=1;j<=tot&&i*p[j]<=1000000;j++)
{
int k=i*p[j];
v[k]=1;
if(i%p[j]==0)
{
mb[k]=0;
break;
}
mb[k]=-mb[i];
}
}
f[1]=1;
invf[1]=inv(1);
for(int i=2;i<=1000000;i++)
{
f[i]=(f[i-1]+f[i-2])%mod;
invf[i]=inv(f[i]);
}//cout<<"OKF"<<endl;
// for(int i=1;i<=20;i++)
// cout<<f[i]<<" "<<invf[i]<<endl;
for(int i=1;i<=1000000;i++)
t[i]=1;
for(int i=1;i<=1000000;i++)
for(int j=i;j<=1000000;j+=i)
{
if(mb[j/i]==-1)
t[j]=(long long)t[j]*(long long)invf[i]%mod;
else if(mb[j/i]==1)
t[j]=(long long)t[j]*(long long)f[i]%mod;
}//cout<<"ok"<<endl;
// for(int i=1;i<=20;i++)
// cout<<i<<" "<<t[i]<<endl;
s[0]=invs[0]=1ll;
for(int i=1;i<=1000000;i++)
{
s[i]=s[i-1]*t[i]%mod;
invs[i]=inv(s[i]);
}
while(T--)
{
n=read(),m=read();
ans=1ll;
if(n>m)
swap(n,m);
for(int i=1,la;i<=n;i=la+1)
{
int ni=n/i,mi=m/i;
la=min(n/ni,m/mi);
ans=ans*ksm(s[la]*invs[i-1]%mod,(long long)ni*mi)%mod;
}
printf("%lld\n",ans);
}
return 0;
}
bzoj 4816: [Sdoi2017]数字表格【莫比乌斯反演+逆元】的更多相关文章
- BZOJ.4816.[SDOI2017]数字表格(莫比乌斯反演)
题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 这个好像简单些啊,只要不犯sb错误 [Update] 真的算反演中比较裸的题了... \(Descriptio ...
- BZOJ 4816 [Sdoi2017]数字表格 ——莫比乌斯反演
大力反演出奇迹. 然后xjb维护. 毕竟T1 #include <map> #include <ctime> #include <cmath> #include & ...
- BZOJ:4816: [Sdoi2017]数字表格
4816: [Sdoi2017]数字表格 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 501 Solved: 222[Submit][Status ...
- [Sdoi2017]数字表格 [莫比乌斯反演]
[Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...
- 【bzoj4816】[Sdoi2017]数字表格 莫比乌斯反演
题目描述 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生 ...
- 【刷题】BZOJ 4816 [Sdoi2017]数字表格
Description Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师 ...
- BZOJ4816 SDOI2017 数字表格 莫比乌斯反演
传送门 做莫比乌斯反演题显著提高了我的\(\LaTeX\)水平 推式子(默认\(N \leq M\),分数下取整,会省略大部分过程) \(\begin{align*} \prod\limits_{i= ...
- BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)
题目链接 \(Description\) 用\(f_i\)表示\(fibonacci\)数列第\(i\)项,求\(\prod_{i=1}^{n}\prod_{j=1}^{m}f[gcd(i,j)]\) ...
- bzoj 4816 [Sdoi2017]数字表格——反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4816 \( ans=\prod\limits_{d=1}^{n}f[d]^{\sum\lim ...
随机推荐
- CodeForces 597A Divisibility
水题. #include<iostream> #include<cstring> #include<cmath> #include<queue> #in ...
- Delphi字符串加密/解密
unit uEncrypt_Decrypt; interface uses SysUtils; const XorKey: array[0..7] of Byte = ($B2, $09, ...
- Max Sum Plus Plus-HDU1024(dp)
Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To b ...
- Windows下SVN服务器及客户端的使用
原文地址:windows下配置VisualSVN Server服务器 作者:Deem_passion 下载安装文件: 服务端安装文件:VisualSVN-Server-1.6.2 客户端安装文件:To ...
- Jmeter参数Parameters和Body Data区别
1.如图: 2.有文章说,Parameters是get的参数:Body Data是post的参数:get的参数存在于url中,post的参数存在于body中: 但是我使用jmeter3.3版本测试 ...
- java nio实现非阻塞Socket通信实例
服务器 package com.java.xiong.Net17; import java.io.IOException; import java.net.InetSocketAddress; imp ...
- poj 1695 Magazine Delivery 记忆化搜索
dp[a][b][c],表示三个人从小到大依次在a,b.c位置时.距离结束最少的时间. 每次选一个人走到c+1位置搜索就好了. 坑点在于不能floyd.预计题目没说清楚.意思就是假设没送Li,那么Li ...
- 同步定制 Unity团队 程序的C#文件模板
孙广东 2015.7.30 就是把程序制定好的模板(不论什么人能够更改并同步git)放到,unity项目的Editor 目录下, 当程序新建一个C#脚本后就是这个模板了. "81-C# ...
- IntelliJ Idea 工具
IntelliJ Idea 优化: 1.如何取消文件自动保存 File->Settings -> Appearance&Behavior -> System Setting ...
- CentOS7.2 设置GRUB2引导界面分辨率
最近在学习OS引导启动,GRUB2的学习材料也不少,主要还看官方手册清晰些. 公司里办公机的多启动用的ubuntu的界面,还挺炫酷的.之前看其他博客网文里看到可以设置grub2的分辨率,我拿CentO ...