[SDOI2017]数字表格
题目描述
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$ 组数据的结果
输入输出样例
3 2 3 4 5 6 7
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]数字表格相关推荐
- SDOI2017 数字表格
SDOI2017 数字表格 题意: 题目传送门 题解: 答案的式子大致是这样的: \[\prod_{i = 1} ^ n \prod_{j = 1} ^ m f_{gcd(i, j)}\] 然后大力反 ...
- 【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 ...
- 「luogu3704」[SDOI2017]数字表格
莫比乌斯反演,其中一些处理比较套路 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 co ...
- 并不对劲的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 ...
- BZOJ 4816 [Sdoi2017]数字表格
题目链接 https://lydsy.com/JudgeOnline/problem.php?id=4816 题解 反演 ∏T=1min(n,m)(∏d∣Tfib(d)μ(d))⌊n/d⌋⌊m/d⌋ ...
- BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)
题目链接 \(Description\) 用\(f_i\)表示\(fibonacci\)数列第\(i\)项,求\(\prod_{i=1}^{n}\prod_{j=1}^{m}f[gcd(i,j)]\) ...
- [bzoj4816][Sdoi2017]数字表格 (反演+逆元)
(真不想做莫比乌斯了) 首先根据题意写出式子 ∏(i=1~n)∏(j=1~m)f[gcd(i,j)] 很明显的f可以预处理出来,解决 根据套路分析,我们可以先枚举gcd(i,j)==d ∏(d=1~n ...
- BZOJ 2154 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演,经典好题)(Luogu P1829)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演,经典好题) Problem S ...
- bzoj2154 Crash的数字表格
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 4549 Solved: 1643 [Submit][Status ...
最新文章
- 【力扣网练习题】整数反转
- c++可达矩阵及连通性_3.9秒破百,矩阵式LED大灯加持,这台国产车可真香
- 配置Configuration Manager站点和层次架构(1)
- rdbms mysql_RDBMS-mysql初步
- 传说中的CAFEBABE到底在哪儿?
- Python学习 Day 025 -模块相关
- linux 防火墙 iptables 允许 某个 某段 IP访问 某个端口
- 笔记:Java虚拟机运行时数据区
- input发送a.jax_JAX-RS 2.0中的透明PATCH支持
- 复旦计算机考研复试要口试吗,2017复旦大学考研复试:英语口语面试常见问题汇总...
- django的基本操作流程
- 课堂练习:eval()、in()
- Activity跳转与返回
- 使用Hbuilder将自己app发布到App Store
- 干涉光强公式怎么计算_光强及计算
- TP—Link路由器进行WDS无线桥接设置方法
- vue less 换肤
- 有幸一睡鸿蒙窍,《嘲鼾睡》原文、译文、翻译、赏析、拼音、作者韩愈-舟山诗词网...
- 年产2000t搅拌型发酵酸奶车间工艺设计
- Android创建子线程和回调主线程的几种方式