首页 > 其他分享 >[BZOJ4833] 最小公倍佩尔数 题解

[BZOJ4833] 最小公倍佩尔数 题解

时间:2025-01-23 20:22:14浏览次数:1  
标签:bf end gcd 题解 sum 公倍 begin bmatrix BZOJ4833

在这篇题解中,我会将各个部分的证明分成不同的推导过程,以达到逐一击破的效果。

引理 1:\(f(n)=2f(n-1)+f(n-2)\)

我的证明挺繁琐的,过程如下:
\((1+\sqrt 2)^{n-2}=e(n-2)+f(n-2)\sqrt 2\)
\((1+\sqrt 2)^{n-1}=e(n-1)+f(n-1)\sqrt 2\)
\((1+\sqrt 2)^{n-1}=(1+\sqrt 2)^{n-2}(1+\sqrt 2)\)
\(=(e(n-2)+2f(n-2))+(e(n-2)+f(n-2))\sqrt 2\)
\(e(n-1)=e(n-2)+2f(n-2),f(n-1)=e(n-2)+f(n-2)\)
\(f(n)=e(n-1)+f(n-1)=2(e(n-2)+f(n-2))+f(n-2)\)
\(f(n)=2f(n-1)+f(n-2)\)
那么递推式有了,如何和 \(\operatorname{lcm}\) 扯上关系呢?

引理 2:\(f(n+m)=f(n+1)f(m)+bf(n)f(m-1)\)

这个引理的完整描述过程如下:

如果 \(f(0)=0,f(1)=1,f(n)=af(n-1)+bf(n-2)\),且 \(\gcd(a,b)=1\),则有 \(\gcd(f(x),f(y))=f(\gcd(x,y))\)。

考虑这个东西长得和个兔子数列似的,于是给他弄个转移矩阵。容易发现有:
\(\begin{bmatrix}f(n+1)\ \ f(n)\end{bmatrix}=\begin{bmatrix}a\ \ 1\\b\ \ 0\end{bmatrix}\begin{bmatrix}f(n)\ \ f(n-1)\end{bmatrix}\)
这个转移矩阵是不平凡的:
\(\begin{bmatrix}f(n+1)\ \ f(n)\\bf(n)\ \ bf(n-1)\end{bmatrix}\begin{bmatrix}a\ \ 1\\b\ \ 0\end{bmatrix}=\begin{bmatrix}af(n+1)+bf(n)\ \ f(n+1)\\bf(n+1)\ \ bf(n)\end{bmatrix}=\begin{bmatrix}f_{n+2}\ \ f(n+1)\\bf(n+1)\ \ bf(n)\end{bmatrix}\)
\(\begin{bmatrix}a\ \ 1\\b\ \ 0\end{bmatrix}^1=\begin{bmatrix}f(2)\ \ f(1)\\bf(1)\ \ bf(0)\end{bmatrix},\begin{bmatrix}a\ \ 1\\b\ \ 0\end{bmatrix}^n=\begin{bmatrix}f(n+1)\ \ f(n)\\bf(n)\ \ bf(n-1)\end{bmatrix}\)
那么就有:
\(\begin{bmatrix}f(n+m+1)\ \ f(n+m)\end{bmatrix}=\begin{bmatrix}a\ \ 1\\b\ \ 0\end{bmatrix}^m\begin{bmatrix}f(n+1)\ \ f(n)\end{bmatrix}\)
\(=\begin{bmatrix}f(m+1)\ \ f(m)\\bf(m)\ \ bf(m-1)\end{bmatrix}\begin{bmatrix}f(n+1)\ \ f(n)\end{bmatrix}\)
\(=\begin{bmatrix}f(n+1)f(m+1)+bf(m)f(n)\ \ f(n+1)f(m)+bf(n)f(m-1)\end{bmatrix}\)
引理 1 得证。

引理 3:\(\gcd(f(x),f(y))=f(\gcd(x,y))\)

显然有:
\(\gcd(f(n+m),f(n))=\gcd(f(n+1)f(m)+bf(n)f(m-1),f(n))\)
\(\gcd(f(n+m),f(n))=\gcd(f(n+1)f(m),f(n))\)
若 \(\gcd(f(n-1),f(n-2))=1\),则有:
\(\gcd(f(n),f(n-1))=\gcd(af(i-1)+bf(n-2),f(n-1))=1\)
由于 \(\gcd(f(1),f(0))=1\),所以 \(\gcd(f(n),f(n-1))=1\)。

所以 \(\gcd(f(n+m),f(n))=\gcd(f(m),f(n))\)。

我们从辗转相除的角度化简,可以得到:

\(\gcd(f(n+m),f(n))=\gcd(f(\gcd(n+m,n)),f(0))\)
\(=f(\gcd(n+m,n))=f(\gcd(m,n))=\gcd(f(m),f(n))\)

引理 4:$\operatorname

特殊说明一下,\(S,T\) 为非空集合。

注意力惊人的注意到:
\(\operatorname{lcm}(S)=\prod_{p\in prime}p^{\max\limits_{i\in S}cnt_{i,p}}\)
\(\gcd(S)=\prod_{p\in prime}p^{\min\limits_{i\in S}cnt_{i,p}}\)
其中 \(cnt_{i,p}\) 表示 \(i\) 中 \(p\) 这个质因子的个数。

想到最值反演。那么有:
\(\operatorname{lcm}(S)=\prod_{p\in prime}p^{\max\limits_{i\in S}cnt_{i,p}}\)
\(\operatorname{lcm}(S)=\prod_{p\in prime}p^{\sum\limits_{T\subseteq S}\min\limits_{i\in T}cnt_{i,p}(-1)^{|T|-1}}\)
\(\operatorname{lcm}(S)=\prod_{T\subseteq S}(\prod_{p\in prime}p^{\min\limits_{i\in T}cnt_{i,p}})^{(-1)^{|T|-1}}\)
\(\operatorname{lcm}(S)=\prod_{T\subseteq S}\gcd(T)^{(-1)^{|T|-1}}\)

\(g(n)\) 的第一推导

设 \(U=\{1,2,\dots,n\}\),则有:
\(g(n)=\prod_{T\subseteq U}(\gcd\limits_{i\in T}f(i))^{(-1)^{|T|-1}}\)
\(g(n)=\prod_{T\subseteq U}f(\gcd(T))^{(-1)^{|T|-1}}\)
看到 \(\gcd\),想到莫比乌斯反演:
\(g(n)=\prod_{i=1}^nf(i)^{\sum\limits_{T\subseteq U}[\gcd(T)=i](-1)^{|T|-1}}\)
记 \(h(i)=\sum\limits_{T\subseteq U}[\gcd(T)=i](-1)^{|T|-1},H(i)=\sum\limits_{i|d}h(d)\),我们就要开启下一部分了。

引理 5:\(H(i)=1\)

设 \(S_i=\{1,2,\dots,\lfloor\dfrac ni\rfloor\}\)(显然 \(|S|>0\)),\(T\) 仍然是非空集合,则有:
\(H(i)=\sum_{i|d}\sum_{T\subseteq U}[\gcd(T)=d](-1)^{|T|-1}\)
\(=\sum_{T\subseteq U}[i|\gcd(T)](-1)^{|T|-1}\)
\(=\sum_{T\subseteq S_i}(-1)^{|T|-1}=-\sum_{T\subseteq S_i}(-1)^{|T|}\)
\(=-(\sum_{i=0}^{|S_i|}\binom{|S|}i(-1)^i-1)\)
\(=-(1-1)^{|S_i|}+1=1\)

\(g(n)\) 的最终推导

根据莫比乌斯反演,有:
\(h(i)=\sum_{i|d}\mu(\frac di)H(d)=\sum_{i|d}\mu(\frac di)\)
带回 \(g(n)\) 中,得:
\(g(n)=\prod_{i=1}^nf(i)^{\sum\limits_{i|d}\mu(\frac di)}\)
\(g(n)=\prod_{d=1}^n\prod_{i|d}f(i)^{\mu(\frac di)}\)
很好算。时间复杂度 \(O(\sum n\log n)\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int t,n,p,mu[N],f[N],s[N];
int qpow(int x,int y){
    int re=1;
    while(y){
        if(y&1) re=re*x%p;
        x=x*x%p,y>>=1;
    }return re;
}signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>t,mu[1]=1;
    for(int i=1;i<N;i++)
        for(int j=i*2;j<N;j+=i) mu[j]-=mu[i];
    while(t--){
        cin>>n>>p,f[1]=s[1]=1;
        for(int i=2;i<=n;i++)
            f[i]=(f[i-1]*2+f[i-2])%p,s[i]=1;
        for(int i=1;i<=n;i++){
            int x=f[i],y=qpow(x,p-2);
            for(int j=i,k=1;j<=n;j+=i,k++)
                s[j]=s[j]*(!mu[k]?1:mu[k]>0?x:y)%p;
        }int re=0,g=s[1];
        for(int i=1;i<=n;)
            re=(re+g*i)%p,g=g*s[++i]%p;
        cout<<re<<"\n";
    }return 0;
}

标签:bf,end,gcd,题解,sum,公倍,begin,bmatrix,BZOJ4833
From: https://www.cnblogs.com/chang-an-22-lyh/p/18688574/bzoj4833-zui_xiao_gong_bei_pei_er_shu-t

相关文章

  • [BZOJ4833] 最小公倍佩尔数 题解
    在这篇题解中,我会将各个部分的证明分成不同的推导过程,以达到逐一击破的效果。引理1:\(f(n)=2f(n-1)+f(n-2)\)我的证明挺繁琐的,过程如下:\[(1+\sqrt2)^{n-2}=e(n-2)+f(n-2)\sqrt2\]\[(1+\sqrt2)^{n-1}=e(n-1)+f(n-1)\sqrt2\]\[(1+\sqrt2)^{n-1}=(1+\sqrt2)^{n-2}(1+\sqrt......
  • 题解:洛谷 P1025 [NOIP2001 提高组] 数的划分
    题目https://www.luogu.com.cn/problem/P1025解法1:深度优先搜素准确来说是DFS+最优性剪枝。我们在上一次选择的数字之后的范围进行枚举,记录这次选择的结果。优化:记录之前的选择的数字之和,我们记为 ,那么枚举的范围为 。 记录的是选择的数字。如果顺利地枚举完了每一......
  • 题解:P4551 最长异或路径
    分析首先我们有如下结论:设两个节点到根节点的路径异或值为\(x_1,x_2\),则这两个节点之间的路径异或值为\(x_1\operatorname{xor}x_2\)。因此可以先求出每个节点到根节点的路径异或值,那么问题就转化成了:从\(n\)个整数中选两个进行异或运算,得到的结果最大是多少。考虑使......
  • [BZOJ4671] 异或图 题解
    我能说什么!抽象了这!看到\(n\le10\)的黑题顿感大事不妙。我们考虑设\(f(i)\)表示将\(n\)个点划分为至少\(i\)个连通块时的方案数。我们可以暴力枚举每个点在哪个连通块里。划分方案是\(Bell(n)\le21147\)的。显然的,相同块内暂时忽略,不同块间不能有边。于是我们将每......
  • [BZOJ3622] 已经没有什么好害怕的了 题解
    发现难以维护差值,于是令\(K=\frac{n+k}2\),这样就把问题转化为了“糖果”比“药片”大的组数为\(K\)的情况有多少种。设\(dp_{i,j}\)表示我们用前\(i\)个“糖果”和“药片”配对,至少有\(j\)组“糖果”比“药片”大,有多少种情况;\(c_i\)表示有多少个“药片”比第\(i\)个......
  • [BZOJ3622] 已经没有什么好害怕的了 题解
    发现难以维护差值,于是令\(K=\frac{n+k}2\),这样就把问题转化为了“糖果”比“药片”大的组数为\(K\)的情况有多少种。设\(dp_{i,j}\)表示我们用前\(i\)个“糖果”和“药片”配对,至少有\(j\)组“糖果”比“药片”大,有多少种情况;\(c_i\)表示有多少个“药片”比第\(i\)个......
  • [BZOJ4665] 小w的喜糖 题解
    我们先假设同种糖间存在差异。设\(f_{i,j}\)表示前\(i\)种糖至少有\(j\)人拿到的糖和原来一样,\(c_i\)表示拿第\(i\)种糖的人的个数,则有:\[f_{i,j}=\sum_{k=0}^{\min(j,c_i)}f_{i-1,j-k}\binom{c_i}kc_i^\underlinek\]设\(g_i\)表示所有人中恰好有\(i\)人拿到的糖......
  • [FJOI2016] 建筑师 题解
    显然有一个\(dp\)思路。设\(f_{i,j}\)表示现在修了\(i\)栋楼,从第一栋楼外侧能看到\(j\)栋楼的方案数,显然有:\[f_{i,j}=\begin{cases}[i=0](j=0)\\f_{i-1,j-1}+(i-1)f_{i-1,j}(j\ne0)\end{cases}\]一眼\(f_{i,j}=\begin{bmatrix}i\\j\end{bmatrix}\)。那么答案即为:\[\s......
  • [BZOJ5093] 图的价值 题解
    考虑计算一个点的贡献,最后\(\timesn\)即为所求。显然一个点的贡献为\(\sum\limits_{i=0}^{n-1}\binom{n-1}ii^k2^{\frac{(n-1)(n-2)}2}\),则有:\[\sum_{i=0}^{n-1}\binom{n-1}ii^k2^{\frac{(n-1)(n-2)}2}=2^{\frac{(n-1)(n-2)}2}\sum_{i=0}^{n-1}\sum_{j=0}^k\begin{Bmatrix}k......
  • [TJOI/HEOI2016] 求和 题解
    为什么又是佳媛姐姐啊啊啊!斯特林数在这道题中不好处理,直接拆开:\[f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}2^jj!\]\[=\sum_{j=0}^n2^jj!\sum_{i=0}^n\sum_{k=0}^j\frac{(-1)^k(j-k)^i}{k!(j-k)!}\]\[=\sum_{j=0}^n2^jj!\sum_{k=0}^j\frac{(-1)^k\sum\l......