大力反演出奇迹。

然后xjb维护。

毕竟T1

#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define md 1000000007
#define maxn 1000005 int T,n,m,f[maxn],g[maxn],finv[maxn],ginv[maxn],mu[maxn];
int vis[maxn],pr[maxn],top=0; int ksm(int a,int b)
{
int ret=1;
while (b)
{
if (b&1) ret=(ll)ret*a%md;
a=(ll)a*a%md;
b>>=1;
}
return ret;
} void init()
{
f[0]=0; f[1]=1; mu[1]=1; g[0]=1; g[1]=1;
F(i,2,maxn-1)
{
f[i]=(f[i-1]+f[i-2])%md; finv[i]=ksm(f[i],md-2);
g[i]=1;
if (!vis[i]) pr[++top]=i,mu[i]=-1;
for (int j=1;j<=top&&(ll)i*pr[j]<maxn;++j)
{
vis[i*pr[j]]=1;
if (i%pr[j]==0) {mu[i*pr[j]]=0;break;}
mu[i*pr[j]]=mu[i]*mu[pr[j]];
}
}
F(i,2,maxn-1)
for (int j=1;(int)i*j<maxn;++j)
{
int tmp;
switch (mu[j])
{
case 1:tmp=f[i];break;
case 0:tmp=1; break;
case -1:tmp=finv[i];break;
}
g[i*j]=(ll)g[i*j]*tmp%md;
}
F(i,1,maxn-1) g[i]=(ll)g[i]*g[i-1]%md;
F(i,0,maxn-1) ginv[i]=ksm(g[i],md-2);
} int cal(int n,int m)
{
int ans=1;
for (int last=0,i=1;i<=n&&i<=m;i=last+1)
{
last=min(n/(n/i),m/(m/i));
ans=(ll)ans*ksm((ll)g[last]*ginv[i-1]%md,(ll)(n/i)*(m/i)%(md-1))%md;
}
return ans;
} int main()
{
init(); scanf("%lld",&T);
while (T--)
{
scanf("%lld%lld",&n,&m);
printf("%lld\n",cal(n,m));
}
return 0;
}

  

最新文章

  1. [LeetCode] Design Tic-Tac-Toe 设计井字棋游戏
  2. strong,weak, retain, assign的区别
  3. delphi中midas是什么
  4. Training
  5. NSArray其中的方法--遍历,
  6. 【原】自定义UINavigationItem的两种方法以及相应的隐藏方法
  7. 【bzoj1059】矩形游戏
  8. 103. Binary Tree Zigzag Level Order Traversal
  9. C#博文搜集
  10. 重温Java的类加载机制
  11. PHP函数十进制、二进制、八进制和十六进制转换
  12. 应用 Valgrind 发现 Linux 程序的内存问题
  13. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)
  14. arcconf
  15. Form开发:字段关系-消息-快速编码-参数和系统变量
  16. css经典布局—stick footer布局
  17. Codeforces Round #524 (Div. 2) C. Masha and two friends(思维+计算几何?)
  18. python:字符串转换成字节的三种方式及字符转码问题
  19. html5与css 1. web标准及组成
  20. 【C++】拷贝构造函数和赋值符函数

热门文章

  1. 01_6_SERVLET如何从上一个页面取得参数
  2. 利用SignalR实现实时聊天
  3. NOIP模拟赛 不等数列
  4. MySQL多源复制
  5. redis集群监控之Redis-monitor部
  6. LeetCode (160) Intersection of Two Linked Lists
  7. 水题:51Nod1432-独木舟
  8. vijos--繁华的都市
  9. Linux学习-核心编译的前处理与核心功能选择
  10. Android自动化测试如何获取坐标点?