「SDOI2017」数字表格
问题分析
\begin{aligned}
Ans&=\prod_{i=1}^n\prod_{j=1}^mf[\gcd(i,j)]\\
&=\prod_{t=1}^nf(t)^{\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)=t]}\\
&=\prod_{t=1}^nf(t)^{\sum\limits_{t|d}^n\mu(\frac{d}{t})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor}\\
&=\prod_{t=1}^n\prod_{t|d}f(t)^{\mu(\frac{d}{t})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor}\\
&=\prod_{d=1}^n\prod_{t|d}f(t)^{\mu(\frac{d}{t})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor}\\
&=\prod_{d=1}^{n}[\prod_{t|d}f(t)^{\mu(\frac{d}{t})}]^{\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor}
\end{aligned}
\]
其中对$\sum\limits_^n\sum\limits_^m[\gcd(i,j)=t]$进行莫比乌斯反演。
设$f(t)=\sum\limits_^n\sum\limits_^m[\gcd(i,j)=t]$。设$F(t)=\sum\limits_^n\sum\limits_^m[t|\gcd(i,j)]=\lfloor\frac\rfloor\lfloor\frac\rfloor$。
因为$F(t)=\sum\limits_{t|d}f(d)$,所以$f(t)=\sum\limits_{t|d}\mu(\frac)F(d)=\sum\limits_{t|d}\mu(\frac)\lfloor\frac\rfloor\lfloor\frac\rfloor$。
最后的式子中,中括号内的东西可以$O(n\log n)$预处理。然后对于每个询问进行整除分块。如果不考虑快速幂,时间复杂度就是$O(T\sqrt n+n\log n)$。
参考代码
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const LL Maxn = 1000010;
const LL N = 1000000;
const LL Mod = 1000000007;
LL Num, Prime[ Maxn ], Vis[ Maxn ], Mu[ Maxn ], F[ Maxn ], G[ Maxn ];
LL Power( LL x, LL y ) {
if( y == 0 ) return 1LL;
LL t = Power( x, y >> 1 );
t = t * t % Mod;
if( y & 1 ) t = t * x % Mod;
return t;
}
void Init() {
F[ 0 ] = 0; F[ 1 ] = 1;
for( int i = 2; i <= N; ++i )
F[ i ] = ( F[ i - 1 ] + F[ i - 2 ] ) % Mod;
Mu[ 1 ] = 1;
for( int i = 2; i <= N; ++i ) {
if( !Vis[ i ] ) {
Mu[ i ] = -1;
Prime[ ++Num ] = i;
}
for( int j = 1; j <= Num && i * Prime[ j ] <= N; ++j ) {
Vis[ i * Prime[ j ] ] = 1;
if( i % Prime[ j ] ) break;
Mu[ i *Prime[ j ] ] = -Mu[ i ];
}
}
for( int i = 0; i <= N; ++i ) G[ i ] = 1;
for( int i = 1; i <= N; ++i ) {
for( int j = i; j <= N; j += i ) {
if( Mu[ j / i ] == 1 )
G[ j ] = G[ j ] * F[ i ] % Mod;
if( Mu[ j / i ] == -1 )
G[ j ] = G[ j ] * Power( F[ i ], Mod - 2 ) % Mod;
}
}
for( int i = 1; i <= N; ++i ) G[ i ] = G[ i ] * G[ i - 1 ] % Mod;
return;
}
void Work() {
LL n, m;
LL Ans = 1;
scanf( "%lld%lld", &n, &m );
if( n > m ) swap( n, m );
for( int i = 1, j; i <= n; i = j + 1 ) {
j = min( ( n / ( n / i ) ), ( m / ( m / i ) ) );
Ans = Ans * Power( G[ j ] * Power( G[ i - 1 ], Mod - 2 ) % Mod, ( n / i ) * ( m / i ) % Mod ) % Mod;
}
printf( "%lld\n", Ans );
return;
}
int main() {
Init();
int TestCases;
scanf( "%d", &TestCases );
for( ; TestCases--; ) Work();
return 0;
}
「SDOI2017」数字表格的更多相关文章
- loj2000 「SDOI2017」数字表格
there #include <iostream> #include <cstring> #include <cstdio> using namespace std ...
- 「SDOI2017」树点涂色 解题报告
「SDOI2017」树点涂色 我sb的不行了 其实一开始有一个类似动态dp的想法 每个点维护到lct树上到最浅点的颜色段数,然后维护一个\(mx_{0,1}\)也就是是否用虚儿子的最大颜色 用个set ...
- loj#2128. 「HAOI2015」数字串拆分 矩阵乘法
目录 题目链接 题解 代码 题目链接 loj#2128. 「HAOI2015」数字串拆分 题解 \(f(s)\)对于\(f(i) = \sum_{j = i - m}^{i - 1}f(j)\) 这个 ...
- LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配
#2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- AC日记——「SDOI2017」序列计数 LibreOJ 2002
「SDOI2017」序列计数 思路: 矩阵快速幂: 代码: #include <bits/stdc++.h> using namespace std; #define mod 201704 ...
- 「SDOI2016」数字配对
「SDOI2016」数字配对 题目大意 传送门 题解 \(a_i\) 是 \(a_j\) 的倍数,且 \(\frac{a_i}{a_j}\) 是一个质数,则将 \(a_i,a_j\) 质因数分解后,其 ...
- 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]
数字表格 Time Limit: 50 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...
- 【LOJ】#2128. 「HAOI2015」数字串拆分
题解 题中给的函数可以用矩阵快速幂递推 我们记一个数组dp[i](这个数组每个元素是一个矩阵)表示从1到i所有的数字经过拆分矩阵递推的加和 转移方法是 \(dp[i] = \sum_{j = 0}^{ ...
- LOJ2269. 「SDOI2017」切树游戏 [FWT,动态DP]
LOJ 思路 显然是要DP的.设\(dp_{u,i}\)表示\(u\)子树内一个包含\(u\)的连通块异或出\(i\)的方案数,发现转移可以用FWT优化,写成生成函数就是这样的: \[ dp_{u}= ...
随机推荐
- 带坑使用微信小程序框架WePY组件化开发项目,附带第三方插件使用坑
纯粹用来记录wepy及相关联内容,以防再犯~ 1. 接手的wepy项目版本是 1.7.2 ,so我没有初始化的过程.... 2. 安装wepy命令工具,npm install wepy-cli -g ...
- Java lesson17 homework
package lesson17; /**1. 创建自定义类Triangle包含如下属性: 最小夹角 a(整型.单位度) 最大夹角 b(整型.单位度) 编写构造方法包含两个参数(夹角),并根据参数计算 ...
- MySQL解惑——GROUP BY隐式排序
原文:MySQL解惑--GROUP BY隐式排序 MySQL中GROUP BY隐式排序是什么概念呢? 主要是其它RDBMS没有这样的概念,如果没有认真了解过概念,对这个概念会感觉有点困惑,我们先来看看 ...
- json在线格式化校验
推荐个在线工具箱,json在线格式化转换编码,挺好用的 https://www.codejson.com/
- maven:无效的目标发行版:11
maven:无效的目标发行版:11 我之前在博客里是不记录bug和error的处理的,昨天听了一个资深程序员的视频,决定要改习惯了,记录一些自己平时遇到的问题 这个是我在mvn clean insta ...
- JS-逻辑运算符的与,或,非
JS-逻辑运算符的与,或,非 1.非 所谓非,就是取反,非真即假,非假即真. 非运算符不仅仅只能用于布尔值,其他数据类型也是可以的,如下: 1.如果操作数是一个对象,返回false 2.如果操作数是一 ...
- nginx php-fpm环境搭建权限问题
如果nginx的work process和php-fpm的运行权限相同,在logrotate的影响下,会导致被上传webshell后 被修改accesslog 故安全配置: nginx.conf: u ...
- Delphi MSComm 控件方法
- OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发
OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发 摘要: 记录实验过程中踩到的坑.介绍OPNsense防火墙的安装配置并搭建实验环境,利用msf的模块及ssh进行流量转发(LAN向DMZ ...
- SQL语句复习【专题八】
SQL语句复习[专题八] 序列 Sequence.数据库对象是 oracle 专有的.作用:可以将某一列的值使用序列,来实现自动增长的功能.访问序列的值.[序列有两个属性 nextval currva ...