Fibonacci GCD Again(数学)
Fibonacci GCD Again(数学)
题目大意
多次询问,给定 \(n,a_0,a_1,a_2,b_0,b_1,b_2\),求
\[\gcd(a_0F_n+a_1F_{n+1}+a_2F_{n+2},b_0F_n+b_1F_{n+1}+b_2F_{n+2}) \mod M
\]
其中 \(F_n\) 表示斐波那契数列第 \(n\) 项
数据范围
\[1 \le N \le 10^{15}\\
1 \le T \le 10^5\\
0 \le a_i,b_i \le 10^3\\
1 \le M \le 10^9
\]
解题思路
数学好题
聪明的你肯定知道把 \(F_{n+2}\) 项化为 \(F_{n}+F_{n+1}\),也就是现在只有 \(a_0, a_1,b_0,b_1\) 了,然而还不爽。
考虑把 \(a_1,b_1\) 消去一个
有一个零自不必说,没有怎么办呢
\[\gcd(a_0F_n+a_1F_{n+1},b_0F_n+b_1F_{n+1})\\
= \gcd(a_0F_n+a_1F_{n+1},(b_0-ka_0)F_n+(b_1-ka_1)F_{n+1})
\]
其中有 \(b_1-ka_1 = b_1 \bmod a_1\)
好啦,你已经发现了,这不是辗转相除吗,这样我们最后就可以消掉一个第二项了
现在局势大概是这种状况
\[\gcd(a_0F_n+a_1F_{n+1},b_0F_n)
\]
如果消掉 \(a_1\) 就再好不过了,可惜不是很行
从孤零零的 \(b_0F_n\) 开始吧,先考虑一个 \(F_n\),~凡有的,还要加倍给他叫他多余;没有的,连他所有的也要夺过来
\[\gcd(a_0F_n+a_1F_{n+1},F_n)\\
=\gcd(a_1F_{n+1},F_n)\\
=\gcd(a_1,F_n)
\]
直接矩阵快速幂在 \(\bmod a_1\) 意义下进行再求 \(\gcd\) 即可
然后考虑 \(b_0\),设 \(g = \gcd(a_0F_n+a_1F_{n+1},F_n)\)
\[\gcd(a_0F_n+a_1F_{n+1},b_0F_n)\\
=g*\gcd(\frac {a_0F_n+a_1F_{n+1}}{g},b_0\frac {F_n}{g})\\
=g*\gcd(\frac {a_0F_n+a_1F_{n+1}}{g},b_0)\\
=g*\gcd(\frac {a_0F_n+a_1F_{n+1} \bmod (gb_0)}{g},b_0)\\
\]
这样就可以开心求解了😁 代码去题解区翻吧