题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4816

推导过程同:http://www.cnblogs.com/zhouzhendong/p/8666106.html

可以利用阶乘处理逆元。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const xn=1e6+,mod=1e9+;
int f[xn],sf[xn],mu[xn],cnt,pri[xn],g[xn],sg[xn],invf[xn],invg[xn];
bool vis[xn];
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return f?ret:-ret;
}
ll pw(ll a,ll b)
{
ll ret=; a=a%mod; b=b%(mod-); if(b<)b+=(mod-);
for(;b;b>>=1ll,a=(a*a)%mod)if(b&)ret=(ret*a)%mod;
return ret;
}
int upt(int x){while(x>=mod)x-=mod; while(x<)x+=mod; return x;}
void init()
{
int mx=1e6; mu[]=;
for(int i=;i<=mx;i++)
{
if(!vis[i])pri[++cnt]=i,mu[i]=-;
for(int j=;j<=cnt&&(ll)i*pri[j]<=mx;j++)
{
vis[i*pri[j]]=;
if(i%pri[j])mu[i*pri[j]]=-mu[i];
else break;
}
} f[]=; sf[]=;
for(int i=;i<=mx;i++)f[i]=upt(f[i-]+f[i-]);
for(int i=;i<=mx;i++)sf[i]=(ll)f[i]*sf[i-]%mod;
int jcn=pw(sf[mx],mod-);
for(int i=mx;i;i--)
invf[i]=(ll)jcn*sf[i-]%mod,jcn=(ll)jcn*f[i]%mod;//inv(f) for(int i=;i<=mx;i++)g[i]=;
for(int i=;i<=mx;i++)
for(int j=i;j<=mx;j+=i)
{
if(mu[j/i]==)g[j]=(ll)g[j]*f[i]%mod;
else if(mu[j/i]==-)g[j]=(ll)g[j]*invf[i]%mod;
} sg[]=;
for(int i=;i<=mx;i++)sg[i]=(ll)g[i]*sg[i-]%mod;
invg[mx]=pw(sg[mx],mod-);
for(int i=mx-;i>=;i--)invg[i]=(ll)invg[i+]*g[i+]%mod;//inv(sg)
//>=0
}
int main()
{
int T=rd(); init();
while(T--)
{
int n=rd(),m=rd(); int mn=min(n,m),ans=;
for(int i=,j;i<=mn;i=j+)
{
j=min(n/(n/i),m/(m/i));
int tmp=(ll)sg[j]*invg[i-]%mod;
tmp=pw(tmp,(ll)(n/i)*(m/i));
ans=(ll)ans*tmp%mod;
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. 三维网格补洞算法(Poisson Method)
  2. Linux shell基础
  3. 一个简单的Promise 实现
  4. dom4j解析xml文档(增删改查)
  5. 【转】Android动态改变对 onCreateDialog话框值 -- 不错不错!!!
  6. javascript控制子页面对父页面控件操作
  7. (hdu)1285 确定比赛名次
  8. IO之同步、异步、阻塞、非阻塞 (2)
  9. virtualbox中linux系统与windows实现共享文件夹
  10. spring-data-redis分布式
  11. Keras 资源
  12. Python-数学篇之计算方法的目录:
  13. C++解析七-重载运算符和重载函数
  14. MySql与对应的Java的时间类型
  15. 移动互联网App兼容性测试
  16. Easyradius 1.699更新,增加用户设备绑定、桥接用户管理功能
  17. 【NOI2015】寿司晚宴
  18. 每日英语:Stalled Project Shows Why China&#39;s Economy Is Wobbling
  19. .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)
  20. MySQL数据库操作(DDL)

热门文章

  1. This instability is a fundamental problem for gradient-based learning in deep neural networks. vanishing exploding gradient problem
  2. PAT 1058. 选择题(20)
  3. RxJava2 源代码解析(一)
  4. RLearning第2弹:创建数据集
  5. IOS int NSInteger NSNumber区分
  6. 316python 基础之计算机基础、Python简介、变量、注释、基础数据类型初识、if、while、语句
  7. 【Flask】SelectedField 同步数据库
  8. 一个例子看懂所有nodejs的官方网络demo
  9. Vim 替换命令
  10. CDN存储和加速静态文件是什么回事(整理)(CDN是什么)