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

\( ans=\prod\limits_{d=1}^{n}f[d]^{\sum\limits_{l=1}^{\frac{n}{d}}\left\lfloor\frac{n}{l*d}\right\rfloor*\left\lfloor\frac{m}{l*d}\right\rfloor} \)

  \(=\prod\limits_{D=1}^{n}\prod\limits_{d|D}f[d]^{\mu(\frac{D}{d})*\left\lfloor\frac{n}{D}\right\rfloor*\left\lfloor\frac{m}{D}\right\rfloor} \)

令 \( g(D)=\prod\limits_{d|D}f(d)^{\mu(\frac{D}{d})} \) ,就能做了。预处理 g 不要 \( \sqrt{n} \) 枚举约数,而 n*ln(n) 枚举倍数。

预处理 g 的前缀积的逆元,回答询问的时候就少一个 log 。

注意指数上是模 (mod-1) !!!

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e6+,mod=1e9+;
int g[N],s[N],sn[N],u[N],pri[N];bool vis[N];
int pw(int x,int k)
{int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;}
void init()
{
int f0=,f1=,lm=1e6,cnt=;
u[]=;
for(int i=;i<=lm;i++)
{
if(!vis[i])pri[++cnt]=i,u[i]=-;
for(int j=;j<=cnt&&(ll)i*pri[j]<=lm;j++)
{
vis[i*pri[j]]=;
if(i%pri[j]==){u[i*pri[j]]=;break;}
u[i*pri[j]]=-u[i];
}
}
for(int j=;j<=lm;j++)g[j]=;
s[]=;
for(int i=;i<=lm;i++)
{
swap(f0,f1);f1+=f0;if(f1>=mod)f1-=mod;
int inv=pw(f1,mod-);
for(int j=i,k=;j<=lm;j+=i,k++)
if(u[k]==)g[j]=(ll)g[j]*f1%mod;
else if(u[k]==-)g[j]=(ll)g[j]*inv%mod;
s[i]=(ll)s[i-]*g[i]%mod;
}
sn[lm]=pw(s[lm],mod-);
for(int i=lm-;i;i--)sn[i]=(ll)sn[i+]*g[i+]%mod;
sn[]=;//
}
int main()
{
int T,n,m;scanf("%d",&T);init();
while(T--)
{
scanf("%d%d",&n,&m);if(n>m)swap(n,m);
int ans=;
for(int i=,j;i<=n;i=j+)
{
int d0=n/i,d1=m/i; j=min(n/d0,m/d1);
ans=(ll)ans*pw((ll)s[j]*sn[i-]%mod,(ll)d0*d1%(mod-))%mod;/////%(mod-1)!!!!!
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
  2. 在AndroidStudio v1.2.0中导入或增加新项目或工程(导入第三方类库或工程)
  3. [转]SQL Server 连接串关键字别名
  4. IE9以上 CSS文件因Mime类型不匹配而被忽略 其他浏览器及IE8以下显示正常
  5. Hibernate——property的access属性
  6. About TI CC3000 Wifi
  7. hdu 1689 Just a Hook
  8. 1057: [ZJOI2007]棋盘制作 - BZOJ
  9. python跟踪脚本进度(类似bash-x)
  10. android 03 TableLayout
  11. SOA两个接口通常用于实现更:SOAP vs REST
  12. 前置通知也能对参数进行加工 通过joiPoint这个方法
  13. 使用LayoutInflater添加一个布局引用
  14. js中被调用的函数获取调用者对象
  15. 【struts2】Struts2的系统架构
  16. Haskell语言学习笔记(24)MonadWriter, Writer, WriterT
  17. sockaddr与sockaddr_in
  18. spring boot 之Rabbitmq 基本配置
  19. git 学习之基础知识
  20. Java Struts2 (三)

热门文章

  1. Python之坐标轴刻度细化、坐标轴设置、标题图例添加
  2. HDU 4669 Mutiples on a circle 不知道该归为哪一类。
  3. fastdfs 集群配置
  4. yum search 不好用时
  5. rsync的服务端和客户端搭建
  6. 【ecmascript】Javascript 严格模式详解【转】
  7. codis3.2安装配置中的一些问题
  8. QT帮助文档 英文
  9. console 代理
  10. live555源码分析