【题解】[SDOI2017]数字表格
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=1e6;
int T,n,m,f[MAXN+10],g[MAXN+10],inv[MAXN+10];
const int mod=1e9+7;
inline int add(int x,int y){return (x+y+mod)%mod;}
inline int mul(int x,int y){return 1ll*x*y%mod;}
inline int mul_(int x,int y){return 1ll*x*y%(mod-1);}
bitset<MAXN+10>vis;
int p[MAXN+10],cnt,mu[MAXN+10],ans;
inline int qpow(int x,int y){
int res=1;
while(y){
if(y&1)res=mul(res,x);
x=mul(x,x);y>>=1;
}
return res;
}
void pretreatment(int G){
mu[1]=1;f[1]=1;inv[1]=1;g[0]=g[1]=1;vis[1]=1;
for(int i=2;i<=G;++i){
f[i]=f[i-1]+f[i-2];f[i]%=mod;
inv[i]=qpow(f[i],mod-2);g[i]=1;
if(!vis[i])p[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*p[j]<=G;++j){
vis[i*p[j]]=1;
if(i%p[j]==0)break;
mu[i*p[j]]=-mu[i];
}
}
//for(int i=1;i<=G;++i)mu[i]+=mu[i-1];
for(int i=1;i<=G;++i){
if(!mu[i])continue;
for(int j=i;j<=G;j+=i){
g[j]=1ll*g[j]*(mu[i]==1?f[j/i]:inv[j/i])%mod;
}
}
for(int i=2;i<=G;++i)g[i]=mul(g[i],g[i-1]);
}
int solve(int N,int M){
int res=1;
for(int l=1,r;l<=min(N,M);l=r+1){
r=min(N/(N/l),M/(M/l));
int PP=mul(g[r],qpow(g[l-1],mod-2));
res=mul(res,qpow(PP,mul_(N/l,M/l)));
}
return res;
}
signed main(){
//freopen("1.in","r",stdin);
//freopen("test.out","w",stdout);
pretreatment(1000000);
scanf("%lld",&T);
while(T--){
scanf("%lld%lld",&n,&m);
if(n>m)swap(n,m);
ans=solve(n,m);
printf("%lld\n",(ans+mod)%mod);
}
return 0;
}
菜鸡笔者推到枚举\(kd\)时没有想到,于是悲惨爆零)
注意函数的筛法,以及指数取余的时候可以套用欧拉定理。
【题解】[SDOI2017]数字表格的更多相关文章
- 题解-[SDOI2017]数字表格
题解-[SDOI2017]数字表格 前置知识: 莫比乌斯反演</> [SDOI2017]数字表格 \(T\) 组测试数据,\(f_i\) 表示 \(\texttt{Fibonacci}\) ...
- [SDOI2017]数字表格 & [MtOI2019]幽灵乐团
P3704 [SDOI2017]数字表格 首先根据题意写出答案的表达式 \[\large\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)} \] 按常规套路改为枚举 \(d ...
- BZOJ:4816: [Sdoi2017]数字表格
4816: [Sdoi2017]数字表格 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 501 Solved: 222[Submit][Status ...
- [Sdoi2017]数字表格 [莫比乌斯反演]
[Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...
- 【BZOJ 4816】 4816: [Sdoi2017]数字表格 (莫比乌斯)
4816: [Sdoi2017]数字表格 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 666 Solved: 312 Description Do ...
- P3704 [SDOI2017]数字表格
P3704 [SDOI2017]数字表格 链接 分析: $\ \ \ \prod\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} f[gcd(i, j)]$ $ ...
- [SDOI2017]数字表格 --- 套路反演
[SDOI2017]数字表格 由于使用markdown的关系 我无法很好的掌控格式,见谅 对于这么简单的一道题竟然能在洛谷混到黑,我感到无语 \[\begin{align*} \prod\limits ...
- P3704 [SDOI2017]数字表格 (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3704 [题解] https://www.luogu.org/blog/cjyyb/solution-p3 ...
- 【bzoj4816】[Sdoi2017]数字表格 莫比乌斯反演
题目描述 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生 ...
随机推荐
- android开发之动画的详解 整理资料 Android开发程序小冰整理
/** * 作者:David Zheng on 2015/11/7 15:38 * * 网站:http://www.93sec.cc * * 微博:http://weibo.com/mcxiaob ...
- Mono生命周期小实验
今天在写代码的时候,遇到一个初始化顺序问题,于是做了一个实验,下面记录结果: 情景: 1.在 脚本A中实例化 一个预制体,该预制体挂有脚本B 2.在 脚本A中,获取实例化物体 身上的 脚本B,并且设置 ...
- Lua索引、伪索引、引用
索引:堆栈的索引 伪索引:一个类似于索引,但是有着特殊存储的索引,使用方式和索引一样,看上去像在操作堆栈 引用:LUA_REGISTRYINDEX伪索引下的表的整数键
- Lua 5.3注册C++类相关API
int luaL_newmetatable (lua_State *L, const char *tname); 如果注册表中不存在名为tname的表,则在注册表中创建一个名为tname的表,并将这个 ...
- Construct a Matrix (矩阵快速幂+构造)
There is a set of matrixes that are constructed subject to the following constraints: 1. The matrix ...
- 18 vue 动态路由传参
params形式 http://192.168.1.100:8080/#/infoDetailed/231 //定义路由{ path: "/infoDetailed/:newsId" ...
- Eclipse获取工作空间跟运行空间
System.out.println(System.getProperty("user.dir"));//当前工作空间 System.out.println(Platform.ge ...
- leetcode刷题-64最小路径和
题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[ [1,3,1], [1,5, ...
- SQL用于更新ID为顺序ID(用于删除了几条数据导致id不连续)
UPDATE tab1022zhm SET ID =FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) ROW,comName FROM dbo.tab1022z ...
- Burp Suite抓包使用步骤
Burp Suite抓包工具的操作步骤见安装步骤那篇博客 检查是否存在漏洞,就看拦截之后修改过的数据是否写进了数据库 举例一.上传文件 1.打开Burp.调整Proxy-Intercept-Inter ...