[SDOI2017]数字表格

由于使用markdown的关系

我无法很好的掌控格式,见谅

对于这么简单的一道题竟然能在洛谷混到黑,我感到无语

\[\begin{align*}
\prod\limits^{n}_{i=1} \prod\limits^{m}_{j=1} fi[gcd(i,j)] &= \prod\limits^{n}_{d=1} fi[d]^{\sum\limits_{e=1}^{n} [n/de][m/de]\mu(e)} \\
&= \prod\limits^{n}_{T = 1} (\prod\limits_{d|T} fi[d]^{\mu(T/d)})^{[n/T][m/T]}
\end{align*}\]

两步化完式子后

只要预处理函数\(f\prod\limits_{d|n} fi[d]^{\mu(n/d)}\)的前缀积就行

可以做到\(O(n)\)求\(fi\),\(O(n)\)求\(\mu\),枚举因子\(O(n logn)\)求这个函数,\(O(n)\)计算前缀积

为了方便,我们同时求出他们的逆元即可

复杂度\(O(n logn + T\sqrt n \log n)\)

代码

#include <cstdio>
#include <iostream>
#define sid 1000050
#define ll long long
#define mod 1000000007
#define ri register int
using namespace std; const int N = 1000000;
ll fi[sid], f[sid], iv[sid];
int mu[sid], pr[sid], nop[sid], pp, tot; int read() { scanf("%d", &pp); return pp; } ll qpow(ll a, ll k) {
ll ret = 1;
while(k) {
if(k & 1) ret = (ret * a) % mod;
a = (a * a) % mod; k >>= 1;
}
return ret;
} void Get_Fib() {
fi[1] = 1; fi[2] = 1;
for(ri i = 3; i <= N; i ++)
fi[i] = (fi[i - 1] + fi[i - 2]) % mod;
} void Get_Mu() {
mu[1] = 1;
for(ri i = 2; i <= N; i ++) {
if(!nop[i]) { pr[++ tot] = i; mu[i] = -1; }
for(ri j = 1; j <= tot; j ++) {
int h = i * pr[j];
if(h > N) break; nop[h] = 1;
if(i % pr[j] == 0) { mu[h] = 0; break; }
else mu[h] = -mu[i];
}
}
} void Get_f() {
for(ri i = 1; i <= N; i ++) f[i] = 1;
for(ri i = 1; i <= N; i ++) {
ll inv = qpow(fi[i], mod - 2);
for(ri j = i; j <= N; j += i)
if(mu[j / i] == -1) f[j] = (f[j] * inv) % mod;
else if(mu[j / i]) f[j] = (f[j] * fi[i]) % mod;
}
f[0] = 1; iv[0] = 1;
for(ri i = 1; i <= N; i ++) f[i] = (f[i] * f[i - 1]) % mod;
for(ri i = 1; i <= N; i ++) iv[i] = qpow(f[i], mod - 2);
} ll Solve(int n, int m) {
ll ret = 1;
if(n > m) swap(n, m);
for(ri i = 1, j; i <= n; i = j + 1) {
j = min(n / (n / i), m / (m / i));
ret = ret * qpow(f[j] * iv[i - 1] % mod, 1ll * (n / i) * (m / i)) % mod;
}
return ret;
} int main() {
Get_Fib(); Get_Mu(); Get_f();
int Tt = read();
while(Tt --) {
int n = read(), m = read();
printf("%lld\n", Solve(n, m));
}
return 0;
}

[SDOI2017]数字表格 --- 套路反演的更多相关文章

  1. [Sdoi2017]数字表格 [莫比乌斯反演]

    [Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...

  2. BZOJ4816 SDOI2017 数字表格 莫比乌斯反演

    传送门 做莫比乌斯反演题显著提高了我的\(\LaTeX\)水平 推式子(默认\(N \leq M\),分数下取整,会省略大部分过程) \(\begin{align*} \prod\limits_{i= ...

  3. BZOJ.4816.[SDOI2017]数字表格(莫比乌斯反演)

    题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 这个好像简单些啊,只要不犯sb错误 [Update] 真的算反演中比较裸的题了... \(Descriptio ...

  4. 【bzoj4816】[Sdoi2017]数字表格 莫比乌斯反演

    题目描述 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生 ...

  5. [bzoj4816][Sdoi2017]数字表格 (反演+逆元)

    (真不想做莫比乌斯了) 首先根据题意写出式子 ∏(i=1~n)∏(j=1~m)f[gcd(i,j)] 很明显的f可以预处理出来,解决 根据套路分析,我们可以先枚举gcd(i,j)==d ∏(d=1~n ...

  6. BZOJ 4816 [Sdoi2017]数字表格 ——莫比乌斯反演

    大力反演出奇迹. 然后xjb维护. 毕竟T1 #include <map> #include <ctime> #include <cmath> #include & ...

  7. luogu3704 [SDOI2017]数字表格(莫比乌斯反演)

    link 设\(f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}(n\ge 2)\) 求\(\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)}\),多组询问, ...

  8. [SDOI2017]数字表格 & [MtOI2019]幽灵乐团

    P3704 [SDOI2017]数字表格 首先根据题意写出答案的表达式 \[\large\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)} \] 按常规套路改为枚举 \(d ...

  9. [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)

    [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...

随机推荐

  1. Spring websocket浏览器连接时出现404错误

    1.场景 在用websocket做一个简单的数据导入页面同步显示后台进度功能的时候,浏览器出现连接不上的错误: WebSocket connection to 'ws://localhost:8080 ...

  2. 在mac上安装ruby

    1.先装RVM,一个多版本ruby环境的管理和切换工具 curl -sSL https://get.rvm.io | bash -s stable 会自动装上最新版.更新RVM版本:$ rvm get ...

  3. 一文掌握关于Java数据结构所有知识点(欢迎一起完善)

    在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫).所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以 ...

  4. MAC和PHY的区别

    一块以太网网卡包括OSI(开方系统互联)模型的两个层.物理层和数据链路层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准.数据编码和电路等,并向数据链路层设备提供标准接口.数据链路层 ...

  5. 宝塔Linux面板新手安装教程【转】

    一.使用远程连接软件 (如 Putty.XShell) 连接你的Linux服务器,本教程以 Putty 为例. 1.动 Putty.exe 程序,进入 Putty 主界面. 2.在 Host Name ...

  6. Entity Framework 5.0 Code First全面学习 (转)

    原文地址:感谢原文作者 http://blog.csdn.net/gentle_wolf/article/details/14004345 不贴图片了,太累. Code First 约定 借助 Cod ...

  7. Keras自定义评估函数

    1. 比较一般的自定义函数: 需要注意的是,不能像sklearn那样直接定义,因为这里的y_true和y_pred是张量,不是numpy数组.示例如下: from keras import backe ...

  8. CentOS7安装Hadoop2.7完整步骤

    总体思路,准备主从服务器,配置主服务器可以无密码SSH登录从服务器,解压安装JDK,解压安装Hadoop,配置hdfs.mapreduce等主从关系. 1.环境,3台CentOS7,64位,Hadoo ...

  9. 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响(转)

    原文链接:http://op.baidu.com/2015/04/https-s01a02/ 1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降 ...

  10. Java多线程之赛跑游戏(含生成exe文件)

    在JavaSE中,多线程是一个重要的内容. 我们要了解多线程的概念,就要先了解进程的概念:要了解进程的概念,就离不开操作系统的概念. 在一台正常运行的电脑中,计算机硬件(如CPU.内存.硬盘.网卡.显 ...