【题解】[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开发之viewpager导报错误解决方法:错误代码 Caused by: java.lang.ClassNotFoundException: Didn't find class
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Caused by: java.lang.ClassNotFoundException: Didn't ...
- Java开发之javaEE(java2EE)的介绍,java软件工程师初步阶段知识
1. 为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担. 为了程序 ...
- C III
http://cossacksworld.ucoz.co.uk/load/c_iii_files/79 http://cossacksworld.ucoz.co.uk/load/c_iii_files ...
- Selenium学习整理(Python)
1 准备软件 Selenium IDE firebug-2.0.19.xpi firepath-0.9.7-fx.xpi Firefox_46.0.1.5966_setup.exe 由于火狐浏览器高版 ...
- 在Oracle中快速创建一张百万级别的表,一张十万级别的表 并修改两表中1%的数据 全部运行时间66秒
万以下小表做性能优化没有多大意义,因此我需要创建大表: 创建大表有三种方法,一种是insert into table selec..connect by.的方式,它最快但是数据要么是连续值,要么是随机 ...
- leetcode刷题-73矩阵置零
题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: ...
- 关于给Tomcat设置maxPostSize的问题
一.为什么要设置maxPostSize tomcat容器对传输数据的大小有限制,如果上传了超过此值的文件,就会报错,使得程序不能正常使用. 二.设置方法 找到tomcat目录下的/conf/serve ...
- centos 遇到/dev/mapper/cl-root 100% 解决方法
yum安装docker时报错[Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/'] ...
- pip更新命令
python -m pip install --upgrade pip 更新时如果报错'NoneType' object has no attribute 'bytes', 解决办法:easy_ins ...
- 《Java从入门到失业》第四章:类和对象(4.2):String类
4.2String类 这一节,我们学习第一个类:String类.String翻译成汉语就是“字符串”,是字符的序列.我们知道,在Java中,默认采用Unicode字符集,因此字符串就是Unicode字 ...