首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

请问一个偏数学的有关问题,来人帮忙

2012-02-05 
请教一个偏数学的问题,来人帮忙啊现在有个递推数列a[n]a[n-1]+a[n-3]+1a[1]a[2]1a[3]2现在给定一个n和

请教一个偏数学的问题,来人帮忙啊
现在有个递推数列
a[n]=a[n-1]+a[n-3]+1
a[1]=a[2]=1
a[3]=2

现在给定一个n和一个m,要求出   a[n]%m
n最大可以达到10^9,m最大可以达到10^4
时限2秒,我用a[n]%m数列找出循环来做,但有的情况一直到10^8左右才开始产生循环

[解决办法]
============================================================
我用a[n]%m数列找出循环来做,但有的情况一直到10^8左右才开始产生循环
===========================================================

是的,二元斐波那契延搁法在模数m选择适当的情况下循环长度可以达到m^2。
[解决办法]
这道题目的一个比较偏数学的解决方法:

1、根据递归表达式,求出f(n)的函数表达式(常微分方程求解)。
2、证明f(n)是一整值表达式。
*3、找到一个f(n)比较简单的表达式子,利用取整。

4、求出a[n]%m



[解决办法]
a[n]=a[n-1]+a[n-3]+1 => (a[n]+1)=(a[n-1]+1)+(a[n-3]+1)
令b[n]=a[n]+1; b[1]=b[2]=2,b[3]=3。
则有:b[n]=b[n-1]+b[n-3]。 (1)
由式(1)看能否写成行列式的形式,如果能的话,计算b[n]就很easy了,有log(n)的算法!

我现在还未找到行列式的形式。

热点排行