一开始只推出O(TN)的做法,后来看了看发现再推一步就好了。

我们只需要枚举gcd就可以啦。

然后我们改变一下枚举顺序

设T为dk

预处理中间那部分前缀积就好了。

 #include<bits/stdc++.h>
using namespace std;
const int N=1e6+,mod=1e9+;
int n,m,p[N/],miu[N],g[N],f[N],inv[N],cnt;bool v[N];
typedef long long ll;
int qmod(int x,ll y)
{
int ans=;
while(y)
{
if(y&)ans=1ll*ans*x%mod;
x=1ll*x*x%mod;y>>=;
}
return ans;
}
void init()
{
miu[]=;
for(int i=;i<=1e6;++i)
{
if(!v[i])
{
p[++cnt]=i;miu[i]=-;
}
for(int j=;j<=cnt&&i*p[j]<=1e6;++j)
{
v[i*p[j]]=;
if(i%p[j]==)break;
miu[i*p[j]]=-miu[i];
}
}
for(int i=;i<=1e6;++i)g[i]=;
f[]=;f[]=g[]=;
for(int i=;i<=1e6;++i)f[i]=(f[i-]+f[i-])%mod;
for(int i=;i<=1e6;++i)
{
inv[i]=qmod(f[i],mod-);
for(int j=i,k=;j<=1e6;j+=i,k++)
if(miu[k])
{
if(miu[k]==-)
g[j]=1ll*g[j]*inv[i]%mod;
else
g[j]=1ll*g[j]*f[i]%mod;
}
g[i]=1ll*g[i]*g[i-]%mod;
}
return;
}
int main()
{
init();int T;
scanf("%d",&T);
for(int k=;k<=T;++k)
{
scanf("%d%d",&n,&m);
if(n>m)swap(n,m);int ans=;
for(int i=,j;i<=n;i=j+)
{
j=min(n/(n/i),m/(m/i));
ans=1ll*ans*qmod(1ll*g[j]*qmod(g[i-],mod-)%mod,1ll*(n/i)*(m/i))%mod;
}
printf("%d\n",(ans+mod)%mod);
}
return ;
}

最新文章

  1. Android 笔记 a+b day6
  2. win7下装ubuntu14.04双系统
  3. Java_ClassLoader内存溢出-从tomcat的reload说起
  4. UGUI与DOtween的坑
  5. Greenplum(GP)常见问题,注意事项
  6. 使用lock和condition实现的阻塞队列-字符串
  7. Microsoft Dynamics CRM 数据库连接存储位置在哪里 是在注册表里
  8. 解决Linux下Oracle中文乱码的一些心得体会 ,转自
  9. Radar Installation(贪心,可以转化为今年暑假不ac类型)
  10. Hudson+Maven+Svn搭建持续集成环境
  11. [经验分享]WebAPI中返回类型JsonMessage的应用
  12. SpringMVC项目中启动自加载Listener
  13. 阿里开源分布式事务解决方案 Fescar
  14. 【hashMap】详谈
  15. freetype之PC机体验
  16. SAS 循环与数组
  17. 自己封装的简单DbDao
  18. ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)
  19. 白鹭引擎 - 资源文件的加载 ( RES, loadConfig, loadGroup )
  20. Gluster vs Ceph:开源存储领域的正面较量

热门文章

  1. MySQL日志功能详解
  2. swift中Any,AnyObject,AnyClass的区别
  3. 第8月第12天 python json.dumps danmu
  4. 恶意代码分析实战-确认EXE什么时候编译的
  5. camera驱动框架分析(上)
  6. df -h执行卡住不动问题解决【转】
  7. MVC Form验证 登陆和退出Cookies的设定和消除
  8. JVM 垃圾回收算法及案例分析
  9. poj1093
  10. 测试开发之Django——No3.Django中的试图(views)