[Sdoi2017]数字表格

题意:求

\[\prod_{i=1}^n \prod_{j=1}^m f[(i,j)]
\]


考场60分

其实多推一步就推倒了...

因为是乘,我们可以放到

\[\prod_{d=1}^n \prod_{i=1}^{\frac{n}{d}}\prod_{i=1}^{\frac{m}{d}} f[d]^{[(i,j)=1]}
\]

套路一直推完

\[\prod_{D=1}^n \prod_{d|D} f[d]^{\mu(\frac{D}{d}) \cdot \frac{n}{D} \cdot \frac{m}{D}}
\]

用枚举倍数的方法预处理

\[\prod_{d|D} f[d]^{\mu(\frac{D}{d})}
\]

的前缀积就行了

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const int N=1e6+5, mo=1e9+7;
typedef long long ll;
inline int read() {
char c=getchar(); int x=0, f=1;
while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
} int Q, n, m, f[N]; ll g[N];
inline ll Pow(ll a, int b) {
ll ans=1;
for(; b; b>>=1, a=a*a%mo)
if(b&1) ans=ans*a%mo;
return ans;
}
int p[N], notp[N]; ll mu[N];
inline void mod(int &x) {if(x>=mo) x-=mo;}
inline void mod(ll &x) {if(x>=mo) x-=mo;} void sieve(int n) {
mu[1]=1;
for(int i=2; i<=n; i++) { //printf("i %d\n",i);
if(!notp[i]) p[++p[0]]=i, mu[i]=-1;
for(int j=1; j<=p[0] && i*p[j]<=n; j++) { //printf("j %d\n",p[j]);
notp[ i*p[j] ]=1;
if(i % p[j] == 0) {
mu[ i*p[j] ]=0;
break;
}
mu[ i*p[j] ] = -mu[i];
}
} f[0]=0; f[1]=1; g[1]=1; g[0]=1;
for(int i=2; i<=n; i++) mod(f[i] += f[i-1] + f[i-2]), g[i] = 1;
for(int i=1; i<=n; i++) {
ll inv = Pow(f[i], mo-2);
for(int j=i, k=1; j<=n; j+=i, k++) if(mu[k]) ( g[j] *= (mu[k]==1 ? f[i] : inv) ) %= mo;
(g[i] *= g[i-1]) %= mo;
}
//for(int i=1; i<=10; i++) printf("fg %d %d %lld\n", i, f[i], g[i]);
} void cal(int n, int m) {
if(n>m) swap(n, m);
ll ans=1; int r;
for(int i=1; i<=n; i=r+1) {
r = min(n/(n/i), m/(m/i));
( ans *= Pow(g[r] * Pow(g[i-1], mo-2) %mo, (ll)(n/i) * (m/i) % (mo-1)) ) %= mo;
}
printf("%lld\n", ans);
}
int main() {
freopen("product.in", "r", stdin);
freopen("product.out", "w", stdout);
sieve(N-1);
Q=read();
for(int i=1; i<=Q; i++) {
n=read(); m=read();
cal(n, m);
}
}

[Sdoi2017]数字表格 [莫比乌斯反演]的更多相关文章

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

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

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

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

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

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

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

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

  5. 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)}\),多组询问, ...

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

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

  7. [SDOI2017]数字表格 --- 套路反演

    [SDOI2017]数字表格 由于使用markdown的关系 我无法很好的掌控格式,见谅 对于这么简单的一道题竟然能在洛谷混到黑,我感到无语 \[\begin{align*} \prod\limits ...

  8. 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]

    数字表格 Time Limit: 50 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...

  9. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

随机推荐

  1. 【Keras】基于SegNet和U-Net的遥感图像语义分割

    上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割,所以刚好又把前段时间做的成果重新 ...

  2. docker创建ceph集群

    背景 Ceph官方现在提供两类镜像来创建集群,一种是常规的,每一种Ceph组件是单独的一个镜像,如ceph/daemon.ceph/radosgw.ceph/mon.ceph/osd等:另外一种是最新 ...

  3. Spark算子--union、intersection、subtract

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/252bcc1d1ab30c430d347279d5827615.html union.intersection ...

  4. ThinkPhp_5框架开发【指导】

    ================================================== ThinkPhp_5环境安装指导 -------------------------------- ...

  5. Python3.6.1的安装

    Python 3.61的下载和安装,下载地址:https://www.python.org/downloads/ 选择最近的版本,目前为Python3.6.1,下载后直接安装即可 下载包为: 双击安装 ...

  6. Linux - ubuntu中vi不能正常使用方向键与退格键的问题

    一度怀疑是键盘坏了! 之前安装solaris也是这个问题! 重新安装vim就可以了! $sudo apt-get remove vim-common $sudo apt-get install vim

  7. springboot之fastjson

    <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...

  8. linux_运维职责

    运维准则: 不要删文件,移动文件,可以复原,一个月后什么事没有,删除 运维人员主要关注哪些方面? CPU:对计算机工作速度和效率起决定性作用(intel amd) 内存: 临时存放数据:容量和处理速度 ...

  9. Django_验证码

    问题: 登录.注册.忘记密码时候,提交用户数据时候,需要用到用户填写验证码,如何生成验证码? 那,解决方法? 第三方模块 django-simple-captcha pip install djang ...

  10. 反编译class文件并重新编译的方法

    在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...