大力推式子

现根据套路枚举\(\gcd(i,j)\)

\(ans=\Pi_{x=1}^nfib[x]^{\sum_{i=1}^{n/x}\sum_{j=1}^{n/x}[\gcd(i,j)=1]}\)

莫比乌斯反演

\(ans=\Pi_{x=1}^nfib[x]^{\sum_{i=1}^{n/x}\mu(i)(n/ix)(m/ix)}\)

把枚举\(i\)提出来,改成枚举\(ix\),里面还是枚举\(x\)

\(ans=\Pi_{i=1}^n\Pi_{x|i}fib[x]^{\mu(i/x)(n/i)(m/i)}\)

有一个\((n/i)(m/i)\),这个明显可以数论分块,但那个\(\mu(i/x)\)就不太好搞了,把他压进去

\(ans=\Pi_{i=1}^n(\Pi_{x|i}fib[x]^{\mu(i/x)})^{(n/i)(m/i)}\)

就可以预处理\(f[i]=(\Pi_{x|i}fib[x]^{\mu(i/x)})\)了

#include<bits/stdc++.h>
#define il inline
#define vd void
#define mod 1000000007
#define Mod 1000000006
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
int pri[1000010],pr,mu[1000010],yes[1000010];
int fib[1000010],ifib[1000010];
int f[1000010],g[1000010];
il int Pow(int x,int y){
int ret=1;
while(y){
if(y&1)ret=1ll*ret*x%mod;
x=1ll*x*x%mod;y>>=1;
}
return ret;
}
int main(){
mu[1]=1;
for(int i=2;i<=1000000;++i){
if(!yes[i])mu[i]=-1,pri[++pr]=i;
for(int j=1;i*pri[j]<=1000000&&j<=pr;++j){
yes[i*pri[j]]=1;
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
mu[i*pri[j]]=-mu[i];
}
}
fib[1]=1;for(int i=2;i<=1000000;++i)fib[i]=(fib[i-1]+fib[i-2])%mod;
for(int i=1;i<=1000000;++i)ifib[i]=Pow(fib[i],mod-2);
for(int i=1;i<=1000000;++i)f[i]=1;
for(int i=1;i<=1000000;++i)
for(int j=i;j<=1000000;j+=i)
if(mu[j/i]==1)f[j]=1ll*f[j]*fib[i]%mod;
else if(mu[j/i]==-1)f[j]=1ll*f[j]*ifib[i]%mod;
for(int i=2;i<=1000000;++i)f[i]=1ll*f[i-1]*f[i]%mod;
g[0]=1;for(int i=1;i<=1000000;++i)g[i]=Pow(f[i],mod-2);
int T=gi(),n,m,ans;
while(T--){
n=gi(),m=gi();
if(n>m)std::swap(n,m);
ans=1;
for(int i=1;i<=n;++i){
int j=std::min(n/(n/i),m/(m/i));
ans=1ll*ans*Pow(1ll*f[j]*g[i-1]%mod,(int)(1ll*(n/i)*(m/i)%Mod))%mod;
i=j;
}
printf("%d\n",ans);
}
return 0;
}

洛咕 P3704 [SDOI2017]数字表格的更多相关文章

  1. bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格

    洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...

  2. 洛谷P3704 [SDOI2017]数字表格

    题目描述 Doris刚刚学习了fibonacci数列.用f[i]f[i] 表示数列的第ii 项,那么 f[0]=0f[0]=0 ,f[1]=1f[1]=1 , f[n]=f[n-1]+f[n-2],n ...

  3. 洛谷 P3704 [SDOI2017]数字表格(莫比乌斯函数)

    题面传送门 题意: 求 \[\prod\limits_{i=1}^n\prod\limits_{j=1}^mfib_{\gcd(i,j)} \] \(T\) 组测试数据,\(1 \leq T \leq ...

  4. 洛谷P3704 [SDOI2017]数字表格(莫比乌斯反演)

    传送门 yyb大佬太强啦…… 感觉还是有一点地方没有搞懂orz //minamoto #include<cstdio> #include<iostream> #include& ...

  5. 洛谷 P3704 SDOI2017 数字表格

    题意: 给定两个整数 \(n, m\),求: \[\prod_{i = 1} ^ n \prod_{j = 1} ^ m \operatorname{Fib}_{\gcd\left(n, m\righ ...

  6. P3704 [SDOI2017]数字表格

    P3704 [SDOI2017]数字表格 链接 分析: $\ \ \ \prod\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} f[gcd(i, j)]$ $ ...

  7. P3704 [SDOI2017]数字表格 (莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P3704 [题解] https://www.luogu.org/blog/cjyyb/solution-p3 ...

  8. 洛谷3704 [SDOI2017] 数字表格 【莫比乌斯反演】

    题目分析: 比较有意思,但是套路的数学题. 题目要求$ \prod_{i=1}^{n} \prod_{j=1}^{m}Fib(gcd(i,j)) $. 注意到$ gcd(i,j) $有大量重复,采用莫 ...

  9. luogu P3704 [SDOI2017]数字表格

    传送门 我是真的弱,推式子只能推一半 下面假设\(n<m\) 考虑题目要求的东西,可以考虑每个gcd的贡献,即\[\prod_{d=1}^{n}f[d]^{\sum_{i=1}^{\lfloor ...

随机推荐

  1. python的函数(三)

    1,函数多类型传值和冗余参数 2,递归函数 1,函数多类型传值和冗余参数 1.0,函数多类型传值 定义1个函数, def fun(x,y): return x+y 调用该函数print fun(1,2 ...

  2. Oracle EBS AP 应付核销到确定一行预付款

    -- purpose: 应付标准发票核销预付款发票中的一行 -- 12.2.6 环境 -- author:jenrry create_date: 2017-06-08 declare l_error_ ...

  3. vscode 折叠所有区域代码的快捷键

    折叠:ctrl + L    ctrl + 0(主键盘区的0,不是小键盘区的0) 展开:ctrl + K    ctrl + J 老是忘记,在此记录

  4. NGUI和UGUI图片字 艺术字(Bitmap图片转文字)制作方法

    用图片字而不是图片 美术和程序的配合,需要程序能够很快抓住问题重点并提出解决方案.美术出的图片字比我们使用的字体更好好看,那么是否要一个个图片去拼成数字呢? NGUI创建图片字 准备材料 美术提供的数 ...

  5. PHP学习第一天

    PHP语句是以分号结尾的 单行注释:   //  C++风格的单行注释 #  shell 风格的单行注释  跟python差不多 多行注释: /*......*/  c++风格的多行注释 常量定义: ...

  6. Linux nmap命令详解

    nmap,也就是Network Mapper,是Linux下的网络扫描和嗅探工具包. nmap是在网络安全渗透测试中经常会用到的强大的扫描器.功能之强大,不言而喻.下面介绍一下它的几种扫描命令.具体的 ...

  7. DevExpress11、TreeList

    一.简介 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  8. buffers与cached

    下面是buffers与cached的区别. buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages. cached是用来给 ...

  9. sublime text3 setting-user

    { "caret_style": "smooth", "find_selected_text": true, "font_size ...

  10. 基于汇编的 C/C++ 协程 - 背景知识

    近几年来,协程在 C/C++ 服务器中的解决方案开始涌现.本文主要阐述以汇编实现上下文切换的协程方案,并且说明其在异步开发模式中的应用. 本文地址:https://segmentfault.com/a ...