题面

反演题,推式子么=。=

$\prod\limits_{d=1}^{min(n,m)}\prod\limits_{i=1}^n\prod\limits_{j=1}^m[gcd(i,j)==d]fib[d]$

把$fib[d]$前提,前面的连乘就跑到指数上去了

$\prod\limits_{d=1}^{min(n,m)}fib[d]^{\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==d]}$

开始反演那坨指数,等等这玩意不是做过么=。=

$\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==d]$

$\sum\limits_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}[gcd(i,j)==1]$

$\sum\limits_{i=1}^{min(\left\lfloor\frac{n}{d}\right\rfloor,\left\lfloor\frac{m}{d}\right\rfloor)}μ(i)\left\lfloor\frac{n}{id}\right\rfloor\left\lfloor\frac{m}{id}\right\rfloor$

于是把$id$捉出来,在原来的整个式子里枚举$id$(不是那个$id$,都懂)

$\prod\limits_{k=1}^{min(n,m)}(\prod\limits_{d|k}fib[d]^{μ(\frac{k}{d})})^{\left\lfloor\frac{n}{k}\right\rfloor\left\lfloor\frac{m}{k}\right\rfloor}$

停,可以做了

对于$\prod\limits_{d|k}fib[d]^{μ(\frac{k}{d})}$,预处理,大力把每个数乘到倍数上去,复杂度$O(n\log n)$

对于$\left\lfloor\frac{n}{k}\right\rfloor\left\lfloor\frac{m}{k}\right\rfloor$这个指数,可以数论分块,这样再加个快速幂每次回答复杂度就是$O(\sqrt n\log mod)$了,可能有点卡常?我倒是一次过了

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,mod=1e9+;
int fib[N],ifb[N],pfb[N],ipf[N];
int pri[N],npr[N],mul[N];
int T,n,m,x,y,mn,cnt,ans;
int qpow(int x,int k)
{
if(k==) return x;
int tmp=qpow(x,k/);
return k%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
}
void exGCD(int a,int b,int &x,int &y)
{
if(!b) {x=,y=; return ;}
exGCD(b,a%b,y,x); y-=a/b*x;
}
int Inv(int b)
{
exGCD(b,mod,x,y);
return (x+mod)%mod;
}
void prework()
{
register int i,j;
npr[]=true,mul[]=,fib[]=,ifb[]=,pfb[]=;
for(i=;i<=M;i++)
{
fib[i]=(fib[i-]+fib[i-])%mod;
ifb[i]=Inv(fib[i]),pfb[i]=;
if(!npr[i])
pri[++cnt]=i,mul[i]=-;
for(j=;j<=cnt&&i*pri[j]<=M;j++)
{
npr[i*pri[j]]=true;
if(i%pri[j]==) break;
else mul[i*pri[j]]=-mul[i];
}
}
for(i=;i<=M;i++)
for(j=i;j<=M;j+=i)
if(mul[j/i]) pfb[j]=1ll*pfb[j]*((~mul[j/i])?fib[i]:ifb[i])%mod;
pfb[]=ipf[]=;
for(i=;i<=M;i++)
{
ipf[i]=Inv(pfb[i]);
pfb[i]=1ll*pfb[i-]*pfb[i]%mod;
ipf[i]=1ll*ipf[i-]*ipf[i]%mod;
}
}
int main()
{
register int i,j;
scanf("%d",&T),prework();
while(T--)
{
scanf("%d%d",&n,&m);
mn=min(n,m),ans=;
for(i=;i<=mn;i=j+)
{
j=min(n/(n/i),m/(m/i));
ans=1ll*ans*qpow(1ll*pfb[j]*ipf[i-]%mod,1ll*(n/i)*(m/i)%(mod-))%mod;
}
printf("%d\n",ans);
}
return ;
}

解题:SDOI 2017 数字表格的更多相关文章

  1. [SDOI 2017]数字表格

    Description 题库链接 记 \(f_i\) 为 \(fibonacci\) 数列的第 \(i\) 项. 求 \[\prod_{i=1}^n\prod_{j=1}^mf_{gcd(i,j)}\ ...

  2. SDOI 2017 Round1 解题报告

    Day 1 T1 数字表格 题目大意 · 求\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mFibonacci(\gcd(i,j))\),\(T\leq1000\) ...

  3. 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告

    [国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...

  4. BZOJ 4816 数字表格

    首先是惯例的吐槽.SDOI题目名称是一个循环,题目内容也是一个循环,基本上过几年就把之前的题目换成另一个名字出出来,喜大普奔亦可赛艇.学长说考SDOI可以考出联赛分数,%%%. 下面放解题报告.并不喜 ...

  5. BZOJ4816 数字表格

    4816: [Sdoi2017]数字表格 Time Limit: 50 Sec  Memory Limit: 128 MB Description Doris刚刚学习了fibonacci数列.用f[i ...

  6. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  7. 【BZOJ】【2154】Crash的数字表格

    莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...

  8. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

    BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...

  9. 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)

    2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...

随机推荐

  1. 国密算法--Openssl 实现国密算法(加密和解密)

    上一次讲了产生密钥,这次我们讲一下加密解密的实现. 先说一下加密解密的流程,一下这些内容都是从国密局发布的国密标准文档里面摘录出来的.大家可以去国密局的网站上自己下载. 下列符号适用于本部分. A,B ...

  2. Spark Streaming流式处理

    Spark Streaming介绍 Spark Streaming概述 Spark Streaming makes it easy to build scalable fault-tolerant s ...

  3. 笨办法学Python - 习题3: Numbers and Math

    目录 习题 3: 数字和数学计算 算术运算符 加分习题: 我的答案: 总结: 扩展: Python比较运算符 Python赋值运算符 Python位运算符 Python逻辑运算符 Python成员运算 ...

  4. string类型和int类型之间的转换

    一.string转int 1. 使用string流 /* 字符串转整型 */ /* * istringstream:从 string 读取数据 * ostringstream:向 string 写入数 ...

  5. Fourteenth scrum meeting

    闫昊 今日完成:整理上一阶段代码,规划第二阶段实施过程 明日完成:学习讨论区开发 唐彬 今日完成:整理上一阶段代码,规划第二阶段实施过程 明日完成:学习学习进度部分开发 史烨轩 今日完成:整理上一阶段 ...

  6. 20135234mqy 实验四

    北京电子科技学院(BESTI) 实     验    报     告 课程:java程序设计 班级:1352  姓名:mqy  学号:20135234 成绩:            指导教师:娄嘉鹏  ...

  7. 团队冲刺——Five

    昨天: 司宇航:web项目如何部署到公网,把网址做成桌面图标链接,登录记住密码功能. 王金萱:注册和登录界面,用户数据库的信息录入. 马佳慧:做界面. 季方:处理爬虫数据,实现统计功能. 遇到的问题: ...

  8. 关于‘1001.A+B Format (20)’的解题报告

    1001.A+B Format(20) 首先要感谢一下指导我github上传问题的小伙伴们,捣腾了一整天我终于摸到了一点门路,真的谢谢你们. 小豪的github 问题描述: Calculate a + ...

  9. json反序列化对象

    这个是同事研究的wcf中中根据type类型反序列化json的示例 /// <summary> /// json转对象 /// </summary> /// <param ...

  10. Django Model基础操作

    关于设计django model django为我们集成了ORM对数据库进行操作,我们只需要进行定义model,django就会自动为我们创建表,以及表之间的关联关系 创建好一个django项目-首先 ...