[xsy2309]数字表格
题意:求$\prod\limits_{i=1}^n\prod\limits_{j=1}^mf_{(i,j)}$,其中$f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}$
很妙的题
假设$n\leq m$,如果我们能找到一个$g$使得$f(n)=\prod\limits_{d|n}g(d)$,那么答案就是$\prod\limits_{d=1}^ng(d)^{\left\lfloor\frac nd\right\rfloor\left\lfloor\frac md\right\rfloor}$
然后直接把莫比乌斯反演搬过来居然也是可以的...我们得到$g(n)=\prod\limits_{d|n}f(d)^{\mu\left(\frac nd\right)}$
于是枚举$d$更新$d$的倍数就预处理出$g$了,时间复杂度$O\left(n\log_2n+T\sqrt n\log_2n\right)$
#include<stdio.h>
typedef long long ll;
const int mod=1000000007,T=1000000;
void swap(int&a,int&b){a^=b^=a^=b;}
int min(int a,int b){return a<b?a:b;}
int mul(int a,int b){return a*(ll)b%mod;}
int pow(int a,ll b){
int s=1;
while(b){
if(b&1)s=mul(s,a);
a=mul(a,a);
b>>=1;
}
return s;
}
int pr[T+10],mu[T+10],f[T+10],rf[T+10],g[T+10],rg[T+10];
bool np[T+10];
void sieve(){
int i,j,M=0;
mu[1]=1;
for(i=2;i<=T;i++){
if(!np[i]){
pr[++M]=i;
mu[i]=-1;
}
for(j=1;j<=M&&i*pr[j]<=T;j++){
np[i*pr[j]]=1;
if(i%pr[j]==0)break;
mu[i*pr[j]]=-mu[i];
}
}
}
int main(){
int cas,n,m,i,j,nex,s;
sieve();
f[0]=0;
f[1]=1;
for(i=2;i<=T;i++)f[i]=(f[i-1]+f[i-2])%mod;
for(i=1;i<=T;i++)rf[i]=pow(f[i],mod-2);
for(i=1;i<=T;i++)g[i]=1;
for(i=1;i<=T;i++){
if(mu[i]){
for(j=i;j<=T;j+=i)g[j]=mul(g[j],(mu[i]==1?f:rf)[j/i]);
}
}
for(i=2;i<=T;i++)g[i]=mul(g[i],g[i-1]);
for(i=1;i<=T;i++)rg[i]=pow(g[i],mod-2);
rg[0]=1;
scanf("%d",&cas);
while(cas--){
scanf("%d%d",&n,&m);
if(n>m)swap(n,m);
s=1;
for(i=1;i<=n;i=nex+1){
nex=min(n/(n/i),m/(m/i));
s=mul(s,pow(mul(g[nex],rg[i-1]),(ll)(n/i)*(m/i)));
}
printf("%d\n",(s+mod)%mod);
}
}
[xsy2309]数字表格的更多相关文章
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- 【BZOJ】【2154】Crash的数字表格
莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...
- 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)
BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...
- 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)
2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...
- BZOJ 4816 数字表格
首先是惯例的吐槽.SDOI题目名称是一个循环,题目内容也是一个循环,基本上过几年就把之前的题目换成另一个名字出出来,喜大普奔亦可赛艇.学长说考SDOI可以考出联赛分数,%%%. 下面放解题报告.并不喜 ...
- 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分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...
- 【BZOJ4816】数字表格(莫比乌斯反演)
[BZOJ4816]数字表格(莫比乌斯反演) 题面 BZOJ 求 \[\prod_{i=1}^n\prod_{j=1}^mf[gcd(i,j)]\] 题解 忽然不知道这个要怎么表示... 就写成这样吧 ...
- 【BZOJ2154】Crash的数字表格(莫比乌斯反演)
[BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...
随机推荐
- HTML语意化
1.什么是HTML语义化? 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读.写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析. 2.为什么要语义化? 为了在没有CSS ...
- mssql手工注入1
强制字符转成数字, 所以报错, 能获得数据 查版本号: http: -- 查数据库版本: http: -- 查当前数据库用户(如果看到dbo 那么多半当前数据库的用户是dba权限): http: -- ...
- C++之容器(关联容器)
关联容器和顺序容器的本质区别:关联容器是通过键存取和读取元素.顺序容器通过元素在容器中的位置顺序存储和访问元素.因此,关联容器不提供front.push_front.pop_front.back.pu ...
- Linux线程同步
1. 线程同步: 当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图.当某个线程可以修改变量,而其他线程也可以读取或者修改这个变量的时候,就需要对这些线程进行同步,以确保他们在访问变量 ...
- OWASP SSL 高级审查工具
http://www.linuxidc.com/Linux/2016-03/129164.htm InfoWorld 在部署.运营和保障网络安全领域精选出了年度开源工具获奖者. 最佳开源网络和安全软件 ...
- 【bzoj4486】【JSOI2015】串分割
老省选题了. 首先考虑怎么比较超长数字的大小? 参见UTR1的那道题 先比size,然后比较字典序即可. 接下来考虑下切割的问题. 因为要将字符串切割成k份,所以这个字符串只会存在n/k个本质不同的起 ...
- 文件上传实现ajax假异步
$.ajaxFileUpload({ url : getSitePath()+'/jlyElderly/doUpdateImage', secureuri : false,//是否需要安全协议 fil ...
- php各个版本的区别
一. PHP 5.2.5.3.5.4.5.5.5.6 版本区别对比以及新功能详解 PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5. ...
- Objective-C字符串处理的函数
Objective-C字符串处理的函数 NSLog(@"字符串处理"); //获得字符串长度 NSString* str1=@"MAC OS Pro"; NSL ...
- HDU-1151
Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...