题解 P2673 《瞿葩的数字游戏》T1-数字王国的门神

$\texttt{link}$

题意

求 $\sum\limits_{i=1}^nf_i\times 10^{n-i},n\rightarrow\infty$ 在十进制下的自高到低第 $l$ 位到第 $r$ 位,其中 $f$ 为 Fibonacci 数列。

数据范围:$10\le l\le r\le2\times 10^5,r-l+1\le 2\times10^3$

题解

奇妙的结论题。

因为 $f_0=0$,不妨把原式表为 $\sum\limits_{i=0}^nf_i\times 10^{n-i}$。

观察式子的形式,感觉和 Fibonacci 数列 OGF 有点关系。

$$\begin{aligned}\sum\limits_{i=0}^nf_i\times 10^{n-i}&=10^n\sum\limits_{i=0}^\infty f_i\times 10^{-i}\\&=10^n\sum\limits_{i=0}^\infty f_i\times(10^{-1})^i\end{aligned}$$

发现右边这部分就是 Fibonacci 数列的 OGF $F(x)=\sum\limits_{i=0}^\infty f_ix^i$,众所周知 $F(x)= \dfrac{x}{1-x-x^2}$,把 $10^{-1}$ 带进去,算出是 $\dfrac{10}{89}\times10^n$,感性理解后发现答案即为 $\dfrac{10}{89}$ 小数点后第 $l$ 到第 $r$ 位。

这里证一下 Fibonacci 数列的 OGF $F(x)=\dfrac{x}{1-x-x^2}$。

$f_i=\begin{cases}0&i=0\\1&i=1 \\f_{i-1}+f_{i-2}&i> 1\end{cases}$,令 $A=F(x)$,根据小学知识,我们可以有这样的变换:

$$A=\sum\limits_{i=0}^\infty f_ix^i$$$$xA=\sum_{i=0}^\infty f_i x^{i+1}\Rightarrow xA=\sum\limits_{i=1}^\infty f_{i-1}x^i$$$$x^2A=\sum_{i=0}^\infty f_i x^{i+2}\Rightarrow x^2A=\sum\limits_{i=2}^\infty f_{i-2}x^i$$

$$\begin{aligned}\therefore xA+x^2A&=f_0x+\sum\limits_{i=2}^\infty (f_{i-1}+f_{i-2})x^i\\&=f_0x+\sum\limits_{i=2}^\infty f_ix^i\\&=\sum\limits_{i=2}^\infty f_ix^i\\&=\sum\limits_{i=0}^\infty f_ix_i-f_0-f_1x\\&=A-x\end{aligned}$$

$$\therefore A-xA-x^2A=x$$$$\therefore (1-x-x^2)A=x$$$$\therefore A=\dfrac{x}{1-x-x^2}$$

即 $F(x)=\dfrac{x}{1-x-x^2}$。

#include <bits/stdc++.h>
using namespace std;
int l, r;
int main() {
    scanf("%d%d", &l, &r);
    int x = 10;
    for(int i = 1; i <= r; i++) {
        if(i >= l) printf("%d", x * 10 / 89);
        x = x * 10 % 89;
    }
    return 0;
}
posted @ 2021-12-04 15:54  Terac  阅读(9)  评论(0)    收藏  举报  来源