【BZOJ4816】[SDOI2017] 数字表格(莫比乌斯反演)
大致题意: 求\(\prod_{i=1}^n\prod_{j=1}^mf(gcd(i,j))\)。
推式子
首先,按照套路我们枚举\(gcd\),得到:
\]
根据\(\sum_{d|n}\mu(d)=[n=1]\),我们可以再转化得到:
\]
然后我们把对\(p\)的枚举移出来,得到:
\]
这个式子如果直接用除法分块套除法分块,是\(O(n)\)的,但多组数据就\(TLE\)了。
所以我们要进一步优化,枚举\(D=dp\),就可以得到这样一个式子:
\]
其中\(\prod_{d|D}f(d)^{\mu({\frac Dd})}\),我们可以枚举\(d\)以及其倍数\(D\)预处理。
再用除法分块求就是\(O(\sqrt n)\)的了。
代码
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 1000000
#define X 1000000007
#define XSum(x,y) ((x)+(y)>=X?(x)+(y)-X:(x)+(y))
#define Qinv(x) Qpow(x,X-2)
using namespace std;
int n,m,f[N+5],g[N+5],ig[N+5];
I int Qpow(RI x,RI y) {RI t=1;W(y) y&1&&(t=1LL*t*x%X),x=1LL*x*x%X,y>>=1;return t;}//快速幂
template<int SZ> class LinearSiever//线性筛
{
private:
int Pt,P[SZ+5];
public:
int mu[SZ+5];
I LinearSiever()
{
RI i,j;for(mu[1]=1,i=2;i<=SZ;++i)
{
!P[i]&&(mu[P[++Pt]=i]=-1);
for(j=1;j<=Pt&&1LL*i*P[j]<=SZ;++j)
if(P[i*P[j]]=1,i%P[j]) mu[i*P[j]]=-mu[i];else break;
}
}
};LinearSiever<N> L;
int main()
{
RI i,j,p;for(f[1]=g[1]=1,i=2;i<=N;++i) f[i]=XSum(f[i-2],f[i-1]),g[i]=1;//预处理斐波那契数
for(i=2;i<=N;++i) for(p=Qinv(f[i]),j=1;1LL*i*j<=N;++j)//预处理
g[i*j]=1LL*g[i*j]*(L.mu[j]?(~L.mu[j]?f[i]:p):1)%X;
for(g[0]=ig[0]=i=1;i<=N;++i) g[i]=1LL*g[i]*g[i-1]%X,ig[i]=Qinv(g[i]);//求前缀积及逆元
RI Tt,t,l,r,ans;scanf("%d",&Tt);W(Tt--)
{
for(scanf("%d%d",&n,&m),ans=l=1,t=min(n,m);l<=t;l=r+1)//除法分块
{
r=min(n/(n/l),m/(m/l)),
ans=1LL*ans*Qpow(1LL*g[r]*ig[l-1]%X,1LL*(n/l)*(m/l)%(X-1))%X;//计算答案
}printf("%d\n",ans);
}return 0;
}
【BZOJ4816】[SDOI2017] 数字表格(莫比乌斯反演)的更多相关文章
- BZOJ4816 SDOI2017 数字表格 莫比乌斯反演
传送门 做莫比乌斯反演题显著提高了我的\(\LaTeX\)水平 推式子(默认\(N \leq M\),分数下取整,会省略大部分过程) \(\begin{align*} \prod\limits_{i= ...
- [Sdoi2017]数字表格 [莫比乌斯反演]
[Sdoi2017]数字表格 题意:求 \[ \prod_{i=1}^n \prod_{j=1}^m f[(i,j)] \] 考场60分 其实多推一步就推倒了... 因为是乘,我们可以放到幂上 \[ ...
- 【bzoj4816】[Sdoi2017]数字表格 莫比乌斯反演
题目描述 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生 ...
- [bzoj4816][Sdoi2017]数字表格 (反演+逆元)
(真不想做莫比乌斯了) 首先根据题意写出式子 ∏(i=1~n)∏(j=1~m)f[gcd(i,j)] 很明显的f可以预处理出来,解决 根据套路分析,我们可以先枚举gcd(i,j)==d ∏(d=1~n ...
- BZOJ.4816.[SDOI2017]数字表格(莫比乌斯反演)
题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 这个好像简单些啊,只要不犯sb错误 [Update] 真的算反演中比较裸的题了... \(Descriptio ...
- BZOJ 4816 [Sdoi2017]数字表格 ——莫比乌斯反演
大力反演出奇迹. 然后xjb维护. 毕竟T1 #include <map> #include <ctime> #include <cmath> #include & ...
- 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)}\),多组询问, ...
- [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)
[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...
- [SDOI2017]数字表格 --- 套路反演
[SDOI2017]数字表格 由于使用markdown的关系 我无法很好的掌控格式,见谅 对于这么简单的一道题竟然能在洛谷混到黑,我感到无语 \[\begin{align*} \prod\limits ...
- 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]
数字表格 Time Limit: 50 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...
随机推荐
- 浅谈C++ STL list 容器
浅谈C++ STL list 容器 本篇随笔简单讲解一下\(C++STL\)中\(list\)容器的使用方法和使用技巧. list容器的概念 学习过\(C++STL\)的很多同学都知道,\(STL\) ...
- LG2679 「NOIP2015」子串 线性DP
问题描述 LG2679 题解 设\(opt[i][j]\)代表A串前\(i\)个,匹配\(B\)串前\(j\)个,选择了\(k\)个子串的方案数. 转移用前缀和优化一下. \(\mathrm{Code ...
- go 创建自己的区块
package main import ( "time" "crypto/sha256" "bytes" ) //区块体 type Bloc ...
- linux编程fcntl获取和设置文件状态
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> ...
- jwt工具类的封装
第一步先引入jar: <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-j ...
- Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源
关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...
- 黄聪:php一句代码让http跳转https
//其他框架请加到入口某共公加载的文件中 //方法一 https状态 if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off'){ Head ...
- What is Java virtual machine?
Java Virtual Machine (JVM) is a specification that provides runtime environment in which java bytec ...
- [算法]LeetCode 120:三角形最小路径和
题目描述: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和 ...
- java基础(10):继承、抽象类
1. 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系.例如公司中的研发部员工和维护部员工 ...