1 条题解
-
0
自动搬运
来自洛谷,原作者为

常青藤
**搬运于
2025-08-24 21:25:38,当前版本为作者最后更新于2019-02-28 12:49:54,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
前言:安利一发自己的博客(LaTeX挂了这边走)(正在迁移)UPD:发现有部分不能正常显示,
在洛谷博客里还好好的,试着调了一下,并删除了一些可有可无的话,求通过题目描述:
数列 满足
给出:首项 、末项 、、,求
算法分析:
矩阵快速幂?
还没学,所以我们就用数(mo)学(fa)来解决这道题。预备知识:特征方程
我们以这个式子为例——
首先我们来看两个数集
$A=\{x\mid x=(-2)^k,k\in\mathbb{N^*}\}\ ,\ B=\{x\mid x=3^k,k\in\mathbb{N^*}\}$
那么,我们可以列出 的前几项:, 的前几项:
将 代入递推式,神奇的发现——
中的数都满足上述的递推式,同样的, 也满足。
很明显, 和 都是上述递推式的通项公式
下面我们来看两个引理——
1、若 是某一递推式的通项公式,那么, 同样满足递推式(两边同乘上系数即可)
2、若 和 都满足递推式,那么, 同样满足(两式乘上系数相加即可)
接下来,我们来看一个经典的例子——斐波拉契数列
现在我们不能像刚才那个式子“观察”出一个通解了,那么就需要我们自己进行构造
现在我们设存在一组等比数列满足这个递推式,其公比为 ,那么我们看一下这个式子——
这就是斐波拉契数列的特征方程
(当然,这个是比较容易理解的解释,详细说明: 特征方程)
把它解出来,可以得到——
那么,我们就知道了——公比为的等比数列满足斐波拉契数列
那么,我们又知道了数列的前两项:
我们设 $f_i=\alpha\times(\frac{\sqrt5+1}{2})^i+\beta\times(\frac{-\sqrt5+1}{2})^i$,代入
则——
$$\begin{cases} \alpha(\frac{\sqrt5+1}{2})+\beta(\frac{-\sqrt5+1}{2})=f_1=1\\\\ \alpha(\frac{\sqrt5+1}{2})^2+\beta(\frac{-\sqrt5+1}{2})^2=f_2=1\\ \end{cases} $$得 ,这样,我们就求出了通项公式
回到之前的递推数列——,怎么得出其通解的?
其实很简单。我们设等比数列公比为 ,就可以得到特征方程——
进入正题,首先来膜改一下式子:
这是 的递推式,我们将 减 :
现在我们得出了答案 ——
那么我们先将 放在一边,设数列 满足 设此数列公比为 ,现在代入——
这就是上述递推式的特征方程 现在解一下这个方程,可以得到——
那么我们就可以得到这个数列的通项公式——
其中 ,并且
$$\begin{cases} \alpha(-\sqrt{2}-1)+\beta(\sqrt{2}-1)=a_1\\ \alpha(-\sqrt{2}-1)^n+\beta(\sqrt{2}-1)^n=a_n\\ \end{cases} $$将上面的方程解出来,我们可以得到——
$$\begin{cases} \alpha=\frac{a_1(\sqrt{2}-1)^{n-1}-a_n}{(-\sqrt{2}-1)(\sqrt{2}-1)^{n-1}-(-\sqrt{2}-1)^n}\\ \\ \beta=\frac{a_1(-\sqrt{2}-1)^{n-1}-a_n}{(\sqrt{2}-1)(-\sqrt{2}-1)^{n-1}-(\sqrt{2}-1)^n}\\ \end{cases} $$代入通项公式并整理——
$$a_m=\frac{a_n[(\sqrt{2}-1)^{m-1}-(-1)^{m-1}(\sqrt{2}+1)^{m-1}]+(-1)^{m-1}a_1[(\sqrt{2}-1)^{n-m}-(-\sqrt{2}-1)^{n-m}]}{(\sqrt{2}-1)^{n-1}-(-1)^{n-1}(\sqrt{2}+1)^{n-1}} $$设,可得
$$a_m=\frac{a_n\times f(m-1)+(-1)^{m-1}a_1\times f(n-m)}{f(n-1)} $$好了,现在是最后一个问题——还有呢!
观察递推式——
我们设 ,代入——
我们又有 ,那么两边约去,可得——
故 那么,根据题意,我们来膜改一下式子——
$$A_m=\frac{(A_n-d)\times f(m-1)+(-1)^{m-1}(A_1-d)\times f(n-m)}{f(n-1)}+d $$这样,我们就得到了数列的通项公式,代码就很好写了~~(没用龟(kuai)速幂,数据太弱QwQ)~~
#include<bits/stdc++.h> using namespace std; const double p=sqrt(2)-1; int n,m; double d,a1,an; double c(int op) {return (op&1)?-1:1;} double f(int x) {return pow(p,x)-c(x)*pow(p+2,x);} int main() { scanf("%d%d%lf%lf%lf",&n,&m,&d,&a1,&an); if(m==0) printf("0.000"); else printf("%.3lf",((an-d)*f(m-1)+c(m-1)*(a1-d)*f(n-m))/f(n-1)+d); return 0; }完结撒花QwQ
- 1
信息
- ID
- 480
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者