(真不想做莫比乌斯了)

首先根据题意写出式子

i=1~nj=1~m)f[gcd(i,j)]

很明显的f可以预处理出来,解决

根据套路分析,我们可以先枚举gcd(i,j)==d

(d=1~n)f[d]......后面该怎么写?

我们发现前面式子中i,j为连乘,而对于相同的gcd,就可以变成f[d]的几次幂!

则∏(d=1~n)f[d]Σ(i=1~n/d)Σ(j=1~m/d)[gcd(i,j)==1]

然后就可以开心的反演了

(d=1~n)f[d]Σ(i=1~n/d)Σ(j=1~m/d)[gcd(i,j)==1]

=∏(d=1~n)f[d]Σ(i=1~n/d)Σ(j=1~m/d)Σ(k|i&&k|j)μ(k)

(接下来,我们先枚举k)

=∏(d=1~n)f[d]Σ(k=1~n)μ[k](n/kd)(m/kd)

(先枚举kd=D)

=∏(D=1~n)(d|D)f[d]μ[D/d](n/D)(m/D)

=∏(D=1~n)(∏(d|D)f[d]μ[D/d])(n/D)(m/D)

至此反演结束

再来观察这个式子,我们发现∏(d|D)f[d]μ[D/d]是关于D的一个函数,我们可以把它的前缀积处理出来,复杂度O(n*log(n))

处理过程中,当μ[D/d]==-1时需要除法,所以需要求逆元,而对于1e9+7这个素数,f[i]对于1e9+7的逆元为pow(f[i],mod-2)

在求解时我们需要取一段的前缀积,所以还需要把前缀积的逆元处理出来,方法同上

逆元处理复杂度O(n*log(n))

在求解时结合数论分块和快速幂,复杂度O(T*sqrt(n)*log(n))

总复杂度O(n*log(n)+T*sqrt(n)*log(n))

这道题做的时候主要卡在把变成Σ并变成指数,在此做个标记

后续有优化可以把求逆元的复杂度干掉

具体参考这篇博客

 

AC代码

#include<cstdio>
#include<iostream>
#define ll long long
#define re register
const int mod=1e9+7;
using namespace std;
int p[500010],top;bool v[1000010];short mu[1000010];ll f[1000010],ni[1000010],tot[1000010];
inline ll pow(ll a,ll b){re ll ans=1;for(;b;b>>=1){if(b&1) (ans*=a)%=mod;(a*=a)%=mod;}return ans;
}
int main(){mu[1]=1;f[1]=1;ni[1]=1;tot[1]=1;for(int i=2;i<=1000000;i++)f[i]=(f[i-1]+f[i-2])%mod,ni[i]=pow(f[i],mod-2),tot[i]=1;for(int i=2;i<=1000000;i++){if(!v[i]){p[++top]=i;mu[i]=-1;}for(int j=1;j<=top&&p[j]*i<=1000000;j++){v[i*p[j]]=1;if(!(i%p[j])) break;mu[i*p[j]]=-mu[i];}}for(int i=1;i<=1000000;i++){for(re int j=1;j*i<=1000000;j++)if(mu[j]==-1) (tot[j*i]*=ni[i])%=mod;else if(mu[j]==1) (tot[j*i]*=f[i])%=mod;}tot[0]=1;for(int i=1;i<=1000000;i++) (tot[i]*=tot[i-1])%=mod;ni[0]=1;for(re int i=1;i<=1000000;i++)ni[i]=pow(tot[i],mod-2);re int t,n,m,x;re ll ans;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);ans=1;if(n>m) swap(n,m);for(int i=1;i<=n;i=x+1){x=min((n/(n/i)),(m/(m/i)));(ans*=pow(tot[x]*ni[i-1]%mod,1ll*(n/i)*(m/i)))%=mod;}printf("%lld\n",ans);}return 0;
}

View Code

 

转载于:https://www.cnblogs.com/mikufun-hzoi-cpp/p/11013959.html

[bzoj4816][Sdoi2017]数字表格 (反演+逆元)相关推荐

  1. SDOI2017 数字表格

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

  2. 【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 ...

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

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

  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. BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)

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

  6. BZOJ 4816 [Sdoi2017]数字表格

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

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

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

  8. [SDOI2017]数字表格

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

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

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

最新文章

  1. opencv实现图片HDR功能
  2. ASP.NET 导出EXCEL
  3. js 停止事件冒泡 阻止浏览器的默认行为
  4. 【产品分析】Microsoft MyPhone试用手记
  5. Windows Server 笔记之网络负载平衡(NLB)和服务质量(QoS)简介
  6. H.266 参考软件VTM下载和安装
  7. 使用JPA和@NamedQueries的Spring数据
  8. 网络流 (网络流问题汇总)
  9. HandlerInterceptor SpringMVC拦截器
  10. 前端调用后端接口 xhr 只看到一次 实际调用两次_持续演进的接口自动化测试方案...
  11. OpenCV-绘制箭头cv::arrowedLine
  12. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_4字符输出流的基本使用_写出单个字符...
  13. 使用lockf()保证应用单进程
  14. 水务信息化数据整合系统方案分析
  15. HDU 5025 Saving Tang Monk
  16. 手机邮箱如何申请注册?163邮箱申请哪个好?
  17. 第十六届—振兴杯计算机网络管理员决赛模拟题
  18. CRM和SCRM,到底有什么区别?
  19. amc 美国数学竞赛能用计算机吗,关于AMC美国数学竞赛的QA
  20. JSON--就是键值对

热门文章

  1. 2023计算机毕业设计SSM最新选题之java中药城药材销售管理系统eah41
  2. 机器学习5—分类算法之随机森林(Random Forest)
  3. Linux入门-1.vim格式设置
  4. Android之获取地理位置
  5. Vulkan_Shader_Day06—光照(多光源_Multiple lights)
  6. **浅谈STM32系列单片机的零基础学习方法**
  7. javafx小球运动
  8. PNAS:大脑区域间耦合的增加和减少会相应增加和减少人类大脑中的振荡活动
  9. Antd组件库的使用
  10. vue 图表三维立体3D散点图