版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

仓库源文站点原文


title: "题解 - [Luogu P3704] [SDOI2017] 数字表格" categories:


题目链接

<!-- more -->

原始题面

题目背景

Doris 刚刚学习了 fibonacci 数列. 用 $f_i$ 表示数列的第 $i$ 项, 那么

$$ f_0=0,f_1=1 $$

$$ fn=f{n-1}+f_{n-2},n\geq 2 $$

题目描述

Doris 用老师的超级计算机生成了一个 $n\times m$ 的表格, 第 $i$ 行第 $j$ 列的格子中的数是 $f_{\gcd(i,j)}$, 其中 $\gcd(i,j)$ 表示 $i,j$ 的最大公约数. Doris 的表格中共有 $n\times m$ 个数, 她想知道这些数的乘积是多少. 答案对 $10^9+7$ 取模

输入输出格式

输入格式

本题单个测试点内有多组测试数据. 输入的第一行是一个整数 $T$, 表示测试数据的组数. 接下来 $T$ 行, 每行两个整数 $n, m$, 表示一组数据

输出格式

对于每组数据, 输出一行一个整数表示答案

输入输出样例

输入样例 #1

3
2 3
4 5
6 7

输出样例 #1

1
6
960

说明

数据规模与约定

解题思路

推式子, 不妨设 $n\geqslant m$

$$ \begin{aligned} \prod{i=1}^n\prod{j=1}^mf{(i,j)}&=\prod{d=1}^n\prod{i=1}^{\lfloor\frac{n}{d}\rfloor}\prod{j=1}^{\lfloor\frac{m}{d}\rfloor}fd^{[(i,j)=1]}\ &=\prod{d=1}^nfd^{\sum{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum{j=1}^{\lfloor\frac{m}{d}\rfloor}[(i,j)=1]}\ &=\prod{d=1}^nfd^{\sum{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum{j=1}^{\lfloor\frac{m}{d}\rfloor}\sum{e\mid (i,j)}\mu(e)}\ &=\prod_{d=1}^nfd^{\sum{e=1}^{\lfloor\frac{n}{d}\rfloor}\mu(e)\lfloor\frac{n}{de}\rfloor\lfloor\frac{m}{de}\rfloor}\ &\xlongequal{D=de}\prod{D=1}^n\bigg(\prod{d\mid D}f_d^{\mu(\frac{D}{d})}\bigg)^{\lfloor\frac{n}{D}\rfloor\lfloor\frac{m}{D}\rfloor} \end{aligned} $$

其中 $\prod_{d\mid D}f_d^{\mu(\frac{D}{d})}$ 部分可以 $O(n\log n)$ 求出, 之后就是整除分块了

时间复杂度

$O(n\log n)$

代码参考

<details open> <summary><font color='orange'>Show code</font></summary> {% icodeweb cpa_cpp title:Luogu_P3704 Luogu/P3704/0.cpp %} </details>