[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. mysql中使用show table status 查看表信息

    本文导读:在使用mysql数据库时,经常需要对mysql进行维护,查询每个库.每个表的具体使用情况,Mysql数据库可以通过执行SHOW TABLE STATUS命令来获取每个数据表的信息. 一.使用 ...

  2. 利用PHPExcel导出Excel并设置Excel格式以及数据源

    浏览:23969 发布日期:2013/07/24 分类:技术分享 代码有点长,读起来有点累.先来个截图 导出的Excel太宽了,所以将后面的列宽重新调整了再截的图 功能包括: 1.设置单元格格式,包括 ...

  3. Postgresql中string转换成timestamp类型

    Mybatis+Postgresql TO_DATE(#{startTime}, 'YYYY-MM-DD') AND op_date <![CDATA[>= ]]>  TO_TIME ...

  4. jQuery学习笔记一

    一.jQuery版本兼容 jQuery版本2以上不支持IE6,7,8浏览器. 如果需要支持IE6/7/8,那么请选择1.9 同样还可以通过条件注释在使用IE6/7/8时只包含进1.9 <!--[ ...

  5. 自己搭建CA颁发证书做https加密网站

    192.168.10.187 CA服务器 192.168.10.190 web服务器 (1)搭建CA cd /etc/pki/CA 在这个目录下创建serial和index.txt两个文件 echo ...

  6. 利用vanitygen生成比特币个性地址的教程

      比特币怎么生成地址?大家都知道比特币地址都是以1开头的一串乱码,很多朋友会新建过一排地址然后在里面挑选,下面小编为大家分享下比特币生成个性地址方法. 其实就是使用vanitygen软件来生成个性化 ...

  7. 使用Python查询JMX

    一.介绍 我们知道 java 项目中的 JMX 接口信息是十分有用的,我们可以提取这些信息来分析或告警.但是 JMX 的 API 只在 java 中实现,因此,找到一个 Python 代码调用 Jav ...

  8. python_利用高阶函数实现剪枝函数

    案例: 某些时候,我们想要为多个函数,添加某种功能,比如计时统计,记录日志,缓存运算结果等等 需求: 在每个函数中不需要添加完全相同的代码 如何解决? 把相同的代码抽调出来,定义成装饰器 求斐波那契数 ...

  9. 虚拟机centos7无法上网解决方法

    1.打开终端输入cd /etc/sysconfig/network-scripts/,输入ls查看网卡配置文件名,每台机器的网卡名并不相同. 第一个ifcfg-ens33是我的网卡名 2. 先取得ro ...

  10. UTF8编码

    UTF-8是Unicode的实现方式之一. UTF-8最大的一个特点,就是它是一种变长的编码方式.它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度. UTF-8的编码规则很简单,只有二 ...