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)\\ \]

这样就可以开心求解了😁 代码去题解区翻吧

posted @ 2020-07-12 23:30  Hs-black  阅读(188)  评论(0编辑  收藏  举报