题目描述

Doris刚刚学习了fibonacci数列。用$f[i]$ 表示数列的第$i$ 项,那么

$f[0]=0$ ,$f[1]=1$ ,

$f[n]=f[n-1]+f[n-2],n\geq 2$

Doris用老师的超级计算机生成了一个$n×m$ 的表格,

第$i$ 行第$j$ 列的格子中的数是$f[\gcd(i,j)]$ ,其中$\gcd(i,j)$ 表示$i,j$ 的最大公约数。

Doris的表格中共有$n×m$ 个数,她想知道这些数的乘积是多少。

答案对$10^9+7$ 取模。

输入输出格式

输入格式:

有多组测试数据。

第一个一个数$T$ ,表示数据组数。

接下来$T$ 行,每行两个数$n,m$

输出格式:

输出$T$ 行,第$i$ 行的数是第$i$ 组数据的结果

输入输出样例

输入样例#1:

3
2 3
4 5
6 7

输出样例#1:

1
6
960

说明

对$10\%$ 的数据,$1\leq n,m\leq 100$

对$30\%$ 的数据,$1\leq n,m\leq 1000$

另外存在$30\%$ 的数据,$T\leq 3$

对$100\%$ 的数据,$T\leq1000,1\leq n,m\leq 10^6$

时间限制:5s

内存限制:128MB

以前做过了,直接上代码。

#include<bits/stdc++.h>
#define ll long long
#define maxn 1000005
using namespace std;
const int ha=1000000007;
const int mo=1000000006;
bool v[maxn];
int zs[maxn/5],t=0,miu[maxn];
int f[maxn],n,m,T,g[maxn],ni[maxn];inline int add(int x,int y){x+=y;return x>=ha?x-ha:x;
}inline int ksm(int x,int y){int an=1;for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha;return an;
}inline void init(){miu[1]=1;for(int i=2;i<=1000000;i++){if(!v[i]) zs[++t]=i,miu[i]=-1;for(int j=1,u;j<=t&&(u=zs[j]*i)<=1000000;j++){v[u]=1;if(!(i%zs[j])) break;miu[u]=-miu[i];}}f[1]=f[2]=ni[1]=ni[2]=1;for(int i=3;i<=1000000;i++) f[i]=add(f[i-1],f[i-2]),ni[i]=ksm(f[i],ha-2);fill(g,g+1000001,1);for(int i=1;i<=1000000;i++)for(int j=i;j<=1000000;j+=i)if(miu[j/i]==1) g[j]=g[j]*(ll)f[i]%ha;else if(miu[j/i]) g[j]=g[j]*(ll)ni[i]%ha;for(int i=1;i<=1000000;i++) g[i]=g[i]*(ll)g[i-1]%ha;
}inline int query(int x,int y){int an=1,nowx,nowy;for(int i=1,j;i<=x;i=j+1){nowx=x/i,nowy=y/i;j=min(x/nowx,y/nowy);an=an*(ll)ksm(g[j]*(ll)ksm(g[i-1],ha-2)%ha,nowx*(ll)nowy%mo)%ha;}return an;
}int main(){init();scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);if(n>m) swap(n,m);printf("%d\n",query(n,m));}return 0;
}

  

转载于:https://www.cnblogs.com/JYYHH/p/8506168.html

[SDOI2017]数字表格相关推荐

  1. SDOI2017 数字表格

    SDOI2017 数字表格 题意: 题目传送门 题解: 答案的式子大致是这样的: \[\prod_{i = 1} ^ n \prod_{j = 1} ^ m f_{gcd(i, j)}\] 然后大力反 ...

  2. 【bzoj4816】[Sdoi2017]数字表格

    题目链接 Description Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Dor ...

  3. 「luogu3704」[SDOI2017]数字表格

    莫比乌斯反演,其中一些处理比较套路 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 co ...

  4. 并不对劲的bzoj4816:loj2000:p3704[SDOI2017]数字表格

    题目大意 有函数\(f(x)\),\(f(0)=0,f(1)=1,f(x)=f(x-1)+f(x-2)\) \(t\)(\(t\leq1000\))组询问,每次给定\(n,m\)(\(n,m\leq1 ...

  5. BZOJ 4816 [Sdoi2017]数字表格

    题目链接 https://lydsy.com/JudgeOnline/problem.php?id=4816 题解 反演 ∏T=1min⁡(n,m)(∏d∣Tfib(d)μ(d))⌊n/d⌋⌊m/d⌋ ...

  6. BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)

    题目链接 \(Description\) 用\(f_i\)表示\(fibonacci\)数列第\(i\)项,求\(\prod_{i=1}^{n}\prod_{j=1}^{m}f[gcd(i,j)]\) ...

  7. [bzoj4816][Sdoi2017]数字表格 (反演+逆元)

    (真不想做莫比乌斯了) 首先根据题意写出式子 ∏(i=1~n)∏(j=1~m)f[gcd(i,j)] 很明显的f可以预处理出来,解决 根据套路分析,我们可以先枚举gcd(i,j)==d ∏(d=1~n ...

  8. BZOJ 2154 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演,经典好题)(Luogu P1829)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演,经典好题) Problem S ...

  9. bzoj2154 Crash的数字表格

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 4549  Solved: 1643 [Submit][Status ...

最新文章

  1. 【力扣网练习题】整数反转
  2. c++可达矩阵及连通性_3.9秒破百,矩阵式LED大灯加持,这台国产车可真香
  3. 配置Configuration Manager站点和层次架构(1)
  4. rdbms mysql_RDBMS-mysql初步
  5. 传说中的CAFEBABE到底在哪儿?
  6. Python学习 Day 025 -模块相关
  7. linux 防火墙 iptables 允许 某个 某段 IP访问 某个端口
  8. 笔记:Java虚拟机运行时数据区
  9. input发送a.jax_JAX-RS 2.0中的透明PATCH支持
  10. 复旦计算机考研复试要口试吗,2017复旦大学考研复试:英语口语面试常见问题汇总...
  11. django的基本操作流程
  12. 课堂练习:eval()、in()
  13. Activity跳转与返回
  14. 使用Hbuilder将自己app发布到App Store
  15. 干涉光强公式怎么计算_光强及计算
  16. TP—Link路由器进行WDS无线桥接设置方法
  17. vue less 换肤
  18. 有幸一睡鸿蒙窍,《嘲鼾睡》原文、译文、翻译、赏析、拼音、作者韩愈-舟山诗词网...
  19. 年产2000t搅拌型发酵酸奶车间工艺设计
  20. Android创建子线程和回调主线程的几种方式

热门文章

  1. man da'te
  2. 使用LinkedBlockingQueue来实现生产者消费者的例子
  3. python中with语句的使用
  4. 可称之为“伟大”的公司
  5. 你问我答,准备面试需要做哪些技术储备,面试官更加关心什么方面的技术点?...
  6. JDK源码分析:Byte.java
  7. MySQL和PostgreSQL的常用语法差异
  8. 逻辑回归的MATLAB实现(二分类问题)
  9. selenium测试(Java)--学习总结
  10. 授权后接口调用(UnionID)