P3704 [SDOI2017]数字表格
P3704 [SDOI2017]数字表格
分析:
$\ \ \ \prod\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} f[gcd(i, j)]$
$=\prod\limits_{d = 1}^{min(n, m)} \prod\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} [gcd(i, j) = d] \times f[d]$
$=\prod\limits_{d = 1}^{min(n, m)} f[d] ^ {\sum\limits_{i = 1}^{n} \sum\limits_{j = 1}^{m} [gcd(i, j) = d]}$
$=\prod\limits_{d = 1}^{min(n, m)} f[d] ^ {\sum\limits_{k = 1}^{min( \frac{n}{d} , \frac{m}{d} )} \mu(k) \frac{n}{kd} \frac{m}{kd}}$
设$T=kd$
$\prod\limits_{T = 1} ^ {min(n, m)} (\prod\limits_{d | T} f[d] ^ {\mu(\frac{T}{d}) } ) ^ {\frac{n}{T} \frac{m}{T} }$
对中间的部分$nlogn$预处理,$O(\sqrt n)$处理每个询问。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = , mod = 1e9 + ;
int mu[N], pri[N], f[N], g1[N], g2[N], inv1[N], inv2[N];
bool nopri[N]; int ksm(int a,LL b) {
register int res = ;
while (b) {
if (b & ) res = 1ll * res * a % mod;
a = 1ll * a * a % mod;
b >>= ;
}
return res % mod;
}
void init(int n) {
nopri[] = true; mu[] = ;
int tot = ;
for (int i = ; i <= n; ++i) {
if (!nopri[i]) pri[++tot] = i, mu[i] = -;
for (register int j = ; j <= tot && pri[j] * i <= n; ++j) {
nopri[pri[j] * i] = ;
if (i % pri[j] == ) { mu[i * pri[j]] = ; break; }
mu[pri[j] * i] = -mu[i];
}
}
f[] = , f[] = ; g1[] = g2[] = ;
for (register int i = ; i <= n; ++i) f[i] = (f[i - ] + f[i - ]) % mod, g1[i] = g2[i] = ;
for (int i = ; i <= n; ++i)
for (int j = i; j <= n; j += i) {
if (mu[j / i] == ) continue;
else if (mu[j / i] == ) g1[j] = 1ll * g1[j] * f[i] % mod;
else g2[j] = 1ll * g2[j] * f[i] % mod;
}
g1[] = g2[] = inv1[] = inv2[] = ;
for (int i = ; i <= n; ++i) {
g1[i] = 1ll * g1[i] * g1[i - ] % mod,
g2[i] = 1ll * g2[i] * g2[i - ] % mod;
inv1[i] = ksm(g1[i], mod - );
inv2[i] = ksm(g2[i], mod - );
}
}
void solve() {
int n = read(), m = read(), nm = min(n, m), pos = , ans = ;
for (int t1, t2, i = ; i <= nm; i = pos + ) {
pos = min(n / (n / i), m / (m / i));
LL t = 1ll * (n / i) * (m / i); // !!!
t1 = 1ll * g1[pos] * inv1[i - ] % mod;
t2 = 1ll * g2[pos] * inv2[i - ] % mod;
ans = 1ll * ans * ksm(t1, t) % mod * ksm(ksm(t2, t), mod - ) % mod;
}
cout << ans << "\n";
}
int main() {
init();
for (int T = read(); T --; solve());
return ;
}
P3704 [SDOI2017]数字表格的更多相关文章
- P3704 [SDOI2017]数字表格 (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3704 [题解] https://www.luogu.org/blog/cjyyb/solution-p3 ...
- bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格
洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...
- 洛谷P3704 [SDOI2017]数字表格
题目描述 Doris刚刚学习了fibonacci数列.用f[i]f[i] 表示数列的第ii 项,那么 f[0]=0f[0]=0 ,f[1]=1f[1]=1 , f[n]=f[n-1]+f[n-2],n ...
- 洛谷 P3704 [SDOI2017]数字表格(莫比乌斯函数)
题面传送门 题意: 求 \[\prod\limits_{i=1}^n\prod\limits_{j=1}^mfib_{\gcd(i,j)} \] \(T\) 组测试数据,\(1 \leq T \leq ...
- luogu P3704 [SDOI2017]数字表格
传送门 我是真的弱,推式子只能推一半 下面假设\(n<m\) 考虑题目要求的东西,可以考虑每个gcd的贡献,即\[\prod_{d=1}^{n}f[d]^{\sum_{i=1}^{\lfloor ...
- 洛咕 P3704 [SDOI2017]数字表格
大力推式子 现根据套路枚举\(\gcd(i,j)\) \(ans=\Pi_{x=1}^nfib[x]^{\sum_{i=1}^{n/x}\sum_{j=1}^{n/x}[\gcd(i,j)=1]}\) ...
- 洛谷P3704 [SDOI2017]数字表格(莫比乌斯反演)
传送门 yyb大佬太强啦…… 感觉还是有一点地方没有搞懂orz //minamoto #include<cstdio> #include<iostream> #include& ...
- 并不对劲的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 ...
- 洛谷 P3704 SDOI2017 数字表格
题意: 给定两个整数 \(n, m\),求: \[\prod_{i = 1} ^ n \prod_{j = 1} ^ m \operatorname{Fib}_{\gcd\left(n, m\righ ...
随机推荐
- Jmeter入门--可执行元件
一.测试片段(Test Fragment) 测试片段元素是控制器上的一种特殊的线程组,它在测试树上与线程组处于一级层级.它与线程组有所不同,因为它不执行,除非它是一个模块控制器或者是被控制器所引用时才 ...
- Elasticsearch部分节点不能发现集群(脑裂)问题处理
**现象描述** es1,es2,es3三台es组成一个集群,集群状态正常, 当es1 服务器重启后,es1不能加到集群中,自己选举自己为master,这就产生了es集群中所谓的“脑裂” , 把es1 ...
- HTML基础标签的综合应用案例(颜色、斜体、加粗、下划线、a标签、无序列表、有序列表)
什么是HTML l HTML(HyperText Mark-up Language)即超文本标记语言或超文本标签语言. l 何为超文本:“超文本”可以实现页面内可以包含图片.链接,甚至音乐.程序等. ...
- 铁乐学python_day21_面向对象编程3
抽象类和接口类 以下内容大部分摘自博客http://www.cnblogs.com/Eva-J/ 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某 ...
- Hadoop HBase概念学习系列之优秀行键设计(十六)
我们通过行键访问HBase.尽管使用扫描过滤器可以一次性指明大量的键,但是HBase仅仅能够根据行键识别出一行. 优秀的行键设计可以保证良好的HBase性能. 1.行键存在于HBase中的每一个单元格 ...
- FTP工具FileZilla&WinSCP与FTP类库FluentFTP
FileZilla Filezilla分为client和server.其中FileZilla Server是Windows平台下一个小巧的第三方FTP服务器软件,系统资源也占用非常小,可以让你快速简单 ...
- 洛谷 P4012 深海机器人问题【费用流】
题目链接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海机器人问题 输入输出样例 输入样例#1: 1 1 2 2 1 2 3 4 5 6 ...
- Day4 数组
双重for循环 外循环控制行,内循环控制列. //乘法表 ; i <= ; i++) { ; j <= i ;j++) { System.out.print(j+"*" ...
- attr全选第三次失效
一功能checkbox时隐时现,比如第一次打开有勾选,第n次打开可能就不选了. 经过偶层层抽次剥茧(da da jiang you),终于知道了原因:attr()在二次选中勾选框时,失效. 比如,如下 ...
- fiddler的inspectors传入的参数乱码
问题描述:如图Q1所示.传入的参数存在中文乱码问题. 本机:win7 系统,解决方法如下 1.windows按钮+R 2.输入regedit +回车+是 3.HKEY_CURRENT_USER\So ...