while True:
try:
def fib(n):
if n <= 2:
return n
else:
return fib(n-1)+fib(n-2)
a=int(input())
print(fib(a))
except:
break
while True:
try:
def fib(n):
if n <= 2:
return n
else:
return fib(n-1)+fib(n-2)
a=int(input())
print(fib(a))
except:
break
建表
是先建X項,如果測資比X大再從X+1開始算,還是直接建到測資的上下界呢?
沒建過表不太清楚
看題目的要求 這題上限只有10000,可以直接建完
建的同時可以利用同餘的性質,不然大數運算很花時間
(a + b) % mod = ((a % mod) + (b % mod)) % mod
NA:33
a=[]
for v in range(1,1001): #不知道同餘怎麼用所以直接炸
if v<=3:
a=a+[v]
else:
x=a[v-2]+a[v-3]
a=a+[x]
while True:
try:
f=int(input())
print(a[f-1])
except:
break
虛擬碼大概長這樣:
fib[10000] //建一個大小為10000的陣列
fib[0] = 1
fib[1] = 1
for i : (2 ~ 9999)
fib[i] = (fib[i - 1] + fib[i - 2]) % mod
index = int(input())
print(fib[index])
虛擬碼大概長這樣:
fib[10000] //建一個大小為10000的陣列
fib[0] = 1
fib[1] = 1
for i : (2 ~ 9999)
fib[i] = (fib[i - 1] + fib[i - 2]) % mod
index = int(input())
print(fib[index])
我上網查了一下 mod 好像是取餘數
那想請教題目中的 mod 1000000007 是甚麼意思
還有 fib[i] = (fib[i - 1] + fib[i - 2]) % mod 中 % mod 的用意是甚麼
我是覺得可能跟之前講的同餘有關係,維基百科:同餘是相容於某個代數運算的等價關係 (看不懂XD
我自己是理解為 兩數 同除另一數得到的餘數相同 稱兩數同餘
還是是有其他解釋 謝謝!