题面:bzoj4816

题意:求∏i=1n∏j=1mf[gcd(i,j)]\prod _{i=1} ^n \prod _{j=1} ^m f[gcd (i, j)]∏i=1n​∏j=1m​f[gcd(i,j)],其中f[i]f[i]f[i]表示第iii项斐波那契数列。膜109+710^9+7109+7

题解

ans=∏i=1n∏j=1mf[gcd(i,j)]=∏d=1n∏i=1n∏j=1m[gcd(i,j)=d]f[d]=∏d=1nf[d]∑i=1nd∑j=1md[gcd(i,j)=1]\begin {aligned} ans & = \prod _{i=1} ^n \prod _{j = 1} ^m f[gcd (i, j)] \\ &= \prod _{d = 1} ^n \prod _{i=1} ^n \prod _{j=1} ^m [gcd (i, j) = d] f[d] \\ & = \prod _{d = 1} ^n f[d] ^ {\sum _{i=1} ^{\frac n d} \sum _{j = 1} ^{\frac m d} [gcd (i, j) = 1]} \end {aligned}ans​=i=1∏n​j=1∏m​f[gcd(i,j)]=d=1∏n​i=1∏n​j=1∏m​[gcd(i,j)=d]f[d]=d=1∏n​f[d]∑i=1dn​​∑j=1dm​​[gcd(i,j)=1]​

指数上的那部分:∑i=1nd∑j=1md[gcd(i,j)=1]=∑i=1ndμ(i)⌊nid⌋⌊mid⌋\sum _{i = 1} ^{\frac n d} \sum _{j = 1} ^{\frac m d} [gcd (i, j) = 1] = \sum _{i = 1} ^{\frac n d} \mu (i) \lfloor \frac n {id} \rfloor \lfloor \frac m {id} \rfloor∑i=1dn​​∑j=1dm​​[gcd(i,j)=1]=∑i=1dn​​μ(i)⌊idn​⌋⌊idm​⌋

令T=idT = idT=id

∑T=1n⌊nT⌋⌊mT⌋∑d∣Tμ(Td)\sum _{T = 1} ^n \lfloor \frac n T \rfloor \lfloor \frac m T \rfloor \sum _{d \mid T} \mu (\frac T d)∑T=1n​⌊Tn​⌋⌊Tm​⌋∑d∣T​μ(dT​)

代回得:

ans=∏T=1n∏d∣Tf[d]⌊nT⌋⌊mT⌋μ(Td)=∏T=1n(∏d∣Tf[d]μ(Td))⌊nT⌋⌊mT⌋\begin {aligned}ans & = \prod _{T = 1} ^n \prod _{d \mid T} f[d] ^{\lfloor \frac n T \rfloor \lfloor \frac m T \rfloor \mu (\frac T d)} \\ &= \prod _{T = 1} ^n (\prod _{d \mid T} f[d] ^{ \mu (\frac T d)}) ^{\lfloor \frac n T \rfloor \lfloor \frac m T \rfloor} \end {aligned}ans​=T=1∏n​d∣T∏​f[d]⌊Tn​⌋⌊Tm​⌋μ(dT​)=T=1∏n​(d∣T∏​f[d]μ(dT​))⌊Tn​⌋⌊Tm​⌋​

整体数论分块,对∏d∣Tf[d]μ(Td)\prod _{d \mid T} f[d] ^{ \mu (\frac T d)}∏d∣T​f[d]μ(dT​)预处理:每个数计算它对它的倍数的贡献。

预处理复杂度:∑i=1nni≈nlogn\sum _{i=1} ^n \frac n i \approx nlogn∑i=1n​in​≈nlogn

同时预处理斐波那契数列的逆元;求⌊nT⌋⌊mT⌋\lfloor \frac n T \rfloor \lfloor \frac m T \rfloor⌊Tn​⌋⌊Tm​⌋次方时膜109+610^9+6109+6

#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int maxn = 1e6 + 10, mod = 1e9 + 7 ;
int mu[maxn], prime[maxn], tot ;
ll f[maxn], g[maxn], F[maxn] ;
bool vis[maxn] ;
ll power (ll x, int y) {ll res = 1 ;while (y) {if (y & 1) res = res * x % mod ;x = x * x % mod; y >>= 1 ;}return res ;
}
void init () {mu[1] = 1; f[1] = g[1] = F[0] = F[1] = 1 ;for (int i = 2; i < maxn; i ++) {f[i] = (f[i - 1] + f[i - 2]) % mod ;g[i] = power (f[i], mod - 2); F[i] = 1 ;if (!vis[i]) prime[++ tot] = i, mu[i] = -1 ;for (int j = 1; j <= tot && i * prime[j] < maxn; j ++) {vis[i * prime[j]] = 1 ;if (i % prime[j] == 0) {mu[i * prime[j]] = 0; break ;}mu[i * prime[j]] = -mu[i] ;}}for (int i = 1; i < maxn; i ++) {if (!mu[i]) continue ;for (int j = i; j < maxn; j += i)F[j] = F[j] * (mu[i] == 1 ? f[j / i] : g[j / i]) % mod ;}for (int i = 2; i < maxn; i ++) F[i] = F[i] * F[i - 1] % mod ;
}
int main() {init () ;int T ;cin >> T ;while (T --) {int n, m ;scanf("%d%d", &n, &m) ;if (n > m) swap (n, m) ;ll ans = 1 ;for (int i = 1, nxt = 0; i <= n; i = nxt + 1) {nxt = min (n / (n / i), m / (m / i)) ;ll t = F[nxt] * power (F[i - 1], mod - 2) % mod ;ans = ans * power (t, 1ll * (n / i) * (m / i) % (mod - 1)) % mod ;}printf("%lld\n", ans) ;}return 0 ;
}

bzoj4816 Sdoi2017 数字表格相关推荐

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

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

  2. SDOI2017 数字表格

    SDOI2017 数字表格 题意: 题目传送门 题解: 答案的式子大致是这样的: \[\prod_{i = 1} ^ n \prod_{j = 1} ^ m f_{gcd(i, j)}\] 然后大力反 ...

  3. 【bzoj4816】[Sdoi2017]数字表格

    题目链接 Description Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Dor ...

  4. 并不对劲的bzoj4816:loj2000:p3704[SDOI2017]数字表格

    题目大意 有函数\(f(x)\),\(f(0)=0,f(1)=1,f(x)=f(x-1)+f(x-2)\) \(t\)(\(t\leq1000\))组询问,每次给定\(n,m\)(\(n,m\leq1 ...

  5. [SDOI2017]数字表格

    题目描述 Doris刚刚学习了fibonacci数列.用$f[i]$ 表示数列的第$i$ 项,那么 $f[0]=0$ ,$f[1]=1$ , $f[n]=f[n-1]+f[n-2],n\geq 2$ ...

  6. 「luogu3704」[SDOI2017]数字表格

    莫比乌斯反演,其中一些处理比较套路 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 co ...

  7. 【BZOJ4816】数字表格,反演+枚举约数

    传送门 思路: 考场上没怎么卡常,只有60分,感觉自己宛如一个zz 先说一下60分做法 设n≤mn\leq m 随便化出来∏d=1nf(d)S(⌊nd⌋,⌊md⌋)\displaystyle\prod ...

  8. BZOJ 4816 [Sdoi2017]数字表格

    题目链接 https://lydsy.com/JudgeOnline/problem.php?id=4816 题解 反演 ∏T=1min⁡(n,m)(∏d∣Tfib(d)μ(d))⌊n/d⌋⌊m/d⌋ ...

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

    题目链接 \(Description\) 用\(f_i\)表示\(fibonacci\)数列第\(i\)项,求\(\prod_{i=1}^{n}\prod_{j=1}^{m}f[gcd(i,j)]\) ...

  10. BZOJ 2154 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演,经典好题)(Luogu P1829)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演,经典好题) Problem S ...

最新文章

  1. android浮动文本,android – 如何将文本添加到浮动操作按钮?
  2. 深入理解JavaScript系列(4):立即调用的函数表达式
  3. Node.js 启动调试方式
  4. yolov2移植到android,darknet(yolov2)移植到caffe框架
  5. P3295-[SCOI2016]萌萌哒【ST表,并查集】
  6. centos 7 下 rabbitmq 3.8.0 erlang 22.1 源码编译安装
  7. 俄国防部《红星电视台》公布一个俄军“监督”下的大型加密货币矿场
  8. [数据]matplotlib总结
  9. SEO HTML语义化
  10. mysql queries 很大,mysql优化通常使用的几种方法
  11. Python数据分析报告
  12. matlab中方差分析的自由度,多因素方差分析:自由度
  13. DL-31/6电流继电器
  14. java倒计时器_Java并发系列5--倒计时器CountDownLatch
  15. Akka and Actors
  16. 转:听听别人怎么说:VueJS 与 ReactJS
  17. 【Origin】Origin准确标注某点
  18. linux 时区文件的规则,linux – 如何将POSIX时间转换为Olson时区文件...
  19. matplotlib pyplot 画图基础教程
  20. 在几何画板中怎样添加链接

热门文章

  1. 科技的终极目标是什么
  2. 怎么选?毕竟可以上网的浏览器只剩下四款了。。。
  3. php windows挂掉,宕机是什么意思
  4. VMware Workstation for Windows 历史版本
  5. [转载]Html 特殊符号 让版权符号更美观_几何途行_新浪博客
  6. 前端屏幕尺寸和分辨率_移动端尺寸基础知识
  7. Java项目:文具学习用品商城系统(java+SSM+JSP+jQuery+Mysql)
  8. Java基础1(数组)
  9. c#动态加载dll并调用dll中类的方法
  10. 如何格式化小米云服务器,互联网要点:怎么把小米手机格式化(恢复出厂设置)...