【发布时间】:2014-11-02 05:42:49
【问题描述】:
我该如何解决
f(n) = f(n-1) + 3*f(n-2) + 3*f(n-3) + f(n-4) maximum value of n = 10^18 minimum is 1
initial conditions are
f(1) = 1
f(2) = 3
f(3) = 3
f(4) = 1
f(n) 什么时候可以很大? print f(n) modulus 10000007
我对这个问题的尝试如下 (使用模数可能会出错)
1st test case:
3
2
5
9
output:
3
20
695
(working fine)
2nd tst case:
3
1554894
5959595
2562651
output:
7505501
9551828
6592801
(working fine)
但是对于更大的数字,程序会失败;为什么?
#!/usr/bin/python
T = int(raw_input())
def fib_iter(n):
if n == 1:
return 1
if n == 2:
return 3
if n == 3:
return 3
if n == 4:
return 1
prev1, prev2, prev3, prev4 = 1, 3, 3, 1
i = 5
while i < n+1:
curr = (prev1%10000007 + 3*prev2%10000007 + 3*prev3%10000007 + prev4%10000007)%10000007
prev1, prev2, prev3, prev4 = prev2%10000007, prev3%10000007, prev4%10000007, curr%10000007
i = i + 1
return curr%10000007
for t in xrange(T):
n = int(raw_input())
print fib_iter(n)
【问题讨论】:
-
您是否考虑过查看 google codejam 提交的解决方案?
-
这个问题似乎是题外话,因为它是一个“我可以危害 codez plz”的问题
-
我已经嵌入了我当前程序的链接......当输入很大(比如 10000000)并且给出错误的答案时,程序在执行过程中需要很长时间......但也给出了错误的答案
-
我建议您编写一个新问题,其中包含您的代码并说明您遇到的具体问题。简单地询问如何编写代码而没有其他任何事情不会得到有用的答案。