51Nod1355 斐波那契的最小公倍数

斐波那契的最小公倍数

定义斐波那契数列 \(f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}~(n\geq 2)\)

给出 \(n\) 个整数 \(a_1,a_2,\dots,a_n\),求 \(\text{lcm}\{f_{a_1},f_{a_2},\dots,f_{a_n}\}\)

\(n \leq 5\times 10^4,a_i \leq 10^6\)

题解

https://blog.csdn.net/alan_cty/article/details/73928751
https://blog.csdn.net/werkeytom_ftd/article/details/73730392

最大公约数

斐波那契数列的最大公约数定理:

\[ \gcd\{f_n,f_m\}=f_{\gcd\{n,m\}} \]

证明可分为四部分。

第一部分

\[ \gcd\{f_n,f_{n-1}\}=1 \]

使用归纳法证明。

  • \(n=1\)时,\(\gcd\{f_1,f_0\}=1\) 显然成立。

  • \(n \geq 2\) 时,

    \[ \gcd\{f_n,f_{n-1}\}=\gcd\{f_{n-1}+f_{n-2},f_{n-1}\}\\ =\gcd\{f_{n-2},f_{n-1}\}=1 \]

第二部分

\[ f_{n+m}=f_{n-1}f_m+f_{n}f_{m+1} \]

使用归纳法证明。

  • \(m=0\) 时,\(f_{n+0}=f_{n-1}f_0+f_nf_1 \rightarrow f_n=f_n\) 显然成立;

  • \(m=1\) 时,\(f_{n+1}=f_{n-1}f_1+f_nf_2\rightarrow f_{n+1}=f_{n-1}+f_n\) 显然成立;

  • \(m \geq 2\) 时,

    \[ f_{n+m}=f_{n+m-1}+f_{n+m-2}\\ =f_{n-1}f_{m-1}+f_nf_m+f_{n-1}f_{m-2}+f_nf_{m-1}\\ =f_{n-1}(f_{m-1}+f_{m-2})+f_n(f_m+f_{m-1})\\ =f_{n-1}f_m+f_nf_{m+1} \]

第三部分

\[ \gcd\{f_{n+m},f_n\}=\gcd\{f_n,f_m\} \]

证明如下,

\[ \gcd\{f_{n+m},f_n\}=\gcd\{f_{n-1}f_m+f_nf_{m+1},f_n\}\\ =\gcd\{f_{n-1}f_m,f_n\}\\ =\gcd\{f_m,f_n\} \]

第四部分

\[ \gcd\{f_n,f_m\}=f_{\gcd\{n,m\}} \]

第三部分的结论也可写作 \(\gcd\{f_n,f_m\}=\gcd\{f_{n-m},f_m\}\)。然后就是辗转相减法的过程。

容斥与反演

构造数列 \(g\),满足

\[ f_n=\prod_{d|n}g_d \]

注意这里是乘法而不是加法。可以用莫比乌斯反演求出 \(g\)

\[ g_n=\prod_{d|n}f_d^{\mu(n/d)} \]

我倒是第一次见连乘的莫比乌斯反演。

因为 \(\gcd\) 更棒,所以我们通过容斥把 \(\text{lcm}\) 转化成 \(\gcd\)
\[ \text{lcm}_{i\in S}\{f_i\}=\prod_{T\subseteq S}\gcd_{i\in T}\{f_i\}^{-1^{|T|+1}} \]

这个容斥本质上是质因子指数的min-max容斥。

\[ \text{lcm}_{i\in S}\{f_i\}=\prod_{T\subseteq S}f_{\gcd_{i\in T}\{i\}}^{-1^{|T|+1}}\\ =\prod_{T\subseteq S}\left(\prod_{d|\gcd_{i\in T}\{i\}}g_d\right)^{-1^{|T|+1}}\\ =\prod_{d}g_d^{\sum_{T\subseteq S,d|\gcd_{i\in T}\{i\}}(-1)^{|T|+1}} \]

观察 \(g_d\) 的指数

\[ \sum_{T\subseteq S,d|\gcd_{i\in T}\{i\}}(-1)^{|T|+1} \]

\(d\) 整除 \(S\)\(t\) 个数。若 \(t=0\) 显然指数为 \(0\),否则为

\[ \sum_{i=1}^t\binom{t}{i}(-1)^{i+1}=-\sum_{i=1}^t\binom{t}{i}1^{t-i}(-1)^i\\ =-((1-1)^t-1)=1 \]
因此我们得到

\[ \text{lcm}_{i\in S}\{f_i\}=\prod_{\exists i\in S,d|i} g_d \]
时间复杂度 \(O(v\log v)\)

CO int N=1e6+10;
int pri[N],tot,mu[N];
int f[N],invf[N],g[N];
bool vis[N];

int main(){
    pri[1]=1,mu[1]=1;
    for(int i=2;i();n--;) vis[read()]=1;
    int ans=1;
    for(int i=1;i

你可能感兴趣的:(51Nod1355 斐波那契的最小公倍数)