传送门
思路:
考场上没怎么卡常,只有60分,感觉自己宛如一个zz
先说一下60分做法
设n≤mn\leq m
随便化出来∏d=1nf(d)S(⌊nd⌋,⌊md⌋)\displaystyle\prod^n_{d=1}f(d)^{S(\lfloor \frac n d \rfloor,\lfloor \frac m d \rfloor)}
其中S(n,m)=∑i=1n∑j=1m[gcd(i,j)=1]=∑d=1nμ(d)⌊nd⌋⌊md⌋\displaystyle S(n,m)=\sum^n_{i=1}\sum^m_{j=1}[\gcd(i,j)=1]=\sum^n_{d=1}\mu(d)\lfloor \frac n d \rfloor\lfloor \frac m d \rfloor
O(T(n+m)34)O(T(n+m)^{\frac 3 4}),带有4倍的常数
常数十分优秀的话可以卡过去
正解的想法很像于神之怒加强版(我还做过。。。)
把S带进去

∏d=1nf(d)∑⌊nd⌋k=1μ(k)⌊ndk⌋⌊mdk⌋

\prod^n_{d=1}f(d)^{\sum^{\lfloor\frac n d\rfloor}_{k=1}\mu(k)\lfloor \frac n {dk} \rfloor \lfloor \frac m {dk} \rfloor}
如果我们把 dkdk相同的看做一起的话(也就是当做新的变量 xx),那么实际上就是一个枚举xx的约数的过程

∏x=1ng(x)⌊nx⌋⌊mx⌋

\prod^n_{x=1} g(x)^{\lfloor \frac n x\rfloor\lfloor \frac m x\rfloor}
其中 g(n)=∏d|nf(d)μ(nd)g(n)=\prod_{d|n}f(d)^{\mu(\frac n d)}
非常像狄利克雷卷积形式,但并不是,而且这也不是积性函数(显然)
所以用筛倍数的方法求得 g(n)g(n),复杂度 O(nlnn)O(n \ln n),同时还要处理 f(n)f(n)的逆元, g(n)g(n)的前缀积和逆元
处理询问时的复杂度是 O(T(n√+m−−√)logn)O(T(\sqrt n+\sqrt m)\log n)
处理逆元时可以 O(n)O(n)做

#include<cstdio>
#include<iostream>
#define mo 1000000007
using namespace std;
int n,m;
const int lim=1000000;
int prime[lim/10+5],mu[lim+5];
int sf[lim+5],f[lim+5],invf[lim+5],sg[lim+5],g[lim+5],invg[lim+5];
bool vis[lim+5];
int qr(int x,int y)
{int t=1;for (;y;y>>=1,x=1LL*x*x%mo)if (y&1) t=1LL*t*x%mo;return t;
}
void init()
{mu[1]=1;for (int i=2;i<=lim;++i){if (!vis[i])prime[++prime[0]]=i,mu[i]=-1;for (int j=1;j<=prime[0]&&i*prime[j]<=lim;++j){vis[i*prime[j]]=1;if (i%prime[j])mu[i*prime[j]]=-mu[i];else{mu[i*prime[j]]=0;break;}}}f[0]=0;sf[1]=1;f[1]=1;g[1]=1;sg[1]=1;invg[0]=invg[1]=invf[0]=invf[1]=1;for (int i=2;i<=lim;++i){f[i]=f[i-1]+f[i-2];if (f[i]>=mo) f[i]-=mo;sf[i]=1LL*sf[i-1]*f[i]%mo;g[i]=1;}invf[lim]=qr(sf[lim],mo-2);for (int i=lim;i>=2;--i)invf[i-1]=1LL*invf[i]*f[i]%mo,invf[i]=1LL*invf[i]*sf[i-1]%mo;for (int i=2;i<=lim;++i){for (int j=1;i*j<=lim;++j)if (mu[j]==1)g[i*j]=1LL*g[i*j]*f[i]%mo;else if (mu[j]==-1)g[i*j]=1LL*g[i*j]*invf[i]%mo;sg[i]=1LL*sg[i-1]*g[i]%mo;}invg[lim]=qr(sg[lim],mo-2);for (int i=lim;i>=2;--i) invg[i-1]=1LL*invg[i]*g[i]%mo;
}
void work()
{scanf("%d%d",&n,&m);int t;if (n>m) swap(n,m);int ans=1;for (int last,t,i=1;i<=n;i=last+1)last=min(n/(n/i),m/(m/i)),ans=1LL*ans*qr(1LL*sg[last]*invg[i-1]%mo,1LL*(n/i)*(m/i)%(mo-1))%mo;printf("%d\n",ans);
}
int main()
{init();int T;for (scanf("%d",&T);T;--T) work();return 0;
}

【BZOJ4816】数字表格,反演+枚举约数相关推荐

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

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

  2. 【BZOJ2154】Crash的数字表格 [莫比乌斯反演]

    Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MB [Submit][Status][Discuss] Description 今天的数学课上,Cr ...

  3. BZOJ 2154 Crash的数字表格 (莫比乌斯反演)

    Crash的数字表格 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如, ...

  4. P1829 [国家集训队]Crash的数字表格(推了好久的mobius反演)

    P1829 [国家集训队]Crash的数字表格 / JZPTAB 推导过程 ∑i=1n∑j=1mlcm(i,j)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} lcm(i, j ...

  5. P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    [国家集训队]Crash的数字表格 / JZPTAB 题目描述 今天的数学课上,Crash 小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数 a a a 和 b b ...

  6. 【BZOJ】【2154】Crash的数字表格

    莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...

  7. bzoj2154 Crash的数字表格

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 4549  Solved: 1643 [Submit][Status ...

  8. 【BZOJ 4816】【SDOI 2017】数字表格

    考虑到 gcd(i,j) gcd(i,j)的这个形式是一个常见的莫比乌斯反演,尝试构造函数. 1.枚举gcd,转化为 ans=∏nd=1f(d)h(d) ans = \prod_{d=1}^{n}f( ...

  9. SDOI2017 数字表格

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

最新文章

  1. Hystrix的应用案例:多短信供应商的自动切换与恢复
  2. P4849 寻找宝藏(模板:四维偏序)
  3. 力扣长度最小的子数组
  4. python的基本数据结构_Python学习笔记——基本数据结构
  5. Python与机器视觉(x) 颜色直方图
  6. Android学习之四大组件简单介绍
  7. 弱性能穿戴设备App化之Lua For STM32
  8. [网络流24题] 试题库问题
  9. 云计算是继互联网计算机后在信息时代,云计算本质是什么?
  10. 计算机cpu一直超频,电脑卡顿怎么办,CPU超频让老电脑起死回生,大神带你玩转CPU!...
  11. [转载]SAP报表开发工具——Report Painter
  12. 飚王硬盘盒怎么样_四款USB 3.0硬盘盒完全拆解_DIY攒机-中关村在线
  13. .net 4.0 ValidateRequest=false 无效解决方法
  14. 初次坐深航,感觉不错
  15. 敏感词过滤程序编写敏感词过滤程序
  16. Android SD卡及U盘插拔状态监听和内容读取
  17. 静态网页制作—制作“当当网首页”
  18. fota空中升级开发完全入门
  19. STM32F4与STM32L4,SPI DMA HAL 关闭片选 时机探讨
  20. ISCC2022 擂台misc

热门文章

  1. 城市智能升级 算法、算力、数据、行业智慧不可缺
  2. 计算机网络c4比赛题目,计算机网络C4习题
  3. python打印字符金字塔_Python教程第7篇:print打印字符串
  4. 二叉树的创建与遍历(C++)
  5. python matplotlib画图遇到的问题——标题重叠问题
  6. 特征工程系列之自动化特征提取器
  7. 通过网络连接检测计算机病毒,网络安全习题及答案
  8. 【数据库基础知识】plsql安装及配置
  9. 【java基础知识】通过java实时查询数据库
  10. mongodb$pull数组更新操作符