【发布时间】:2012-07-03 10:04:22
【问题描述】:
可能重复:
I want to generate the nth term of the sequence 1,3,8,22,60 ,164 in Order(1) or order of (nlogn)
我现在要做的是:
t1 = 1, t2 = 0,MOD = 1000000007;
for i = 1:n
t1_new = (2*(t1+t2)) % MOD;
t2_new = t1;
a[i] = (t1_new + t2_new) % MOD; // where a[i] is the ith term mod p
t1 = t1_new;
t2 = t2_new;
return a[n]; // the required ans
但这是一个 O(n) 的解决方案。
请只给我提示(请不要解决),以便我可以降低解决方案的复杂性。
【问题讨论】:
-
这里有一个提示:不要将旧结果存储在数组中,这样
a就可以成为寄存器变量。 -
t_n 和 t_(n-1) 之间的循环关系是什么? t_n = 2 * (t_(n-1) + t_(n-2)) ?尝试使用特征方程求解这个递归方程。
标签: c++ algorithm math sequence