終於結束的起點乙個個 oier 的競賽生涯總是從一場 noip 開始,大多也在一場 noip 中結束,好似一次次輪迴在不斷上演。終於寫下句點
終於我們告別
終於我們又回到原點
……
如果這次 noip 是你的起點,那麼祝你的 oi 生涯如同夏花般絢爛。
如果這次 noip 是你的終點,那麼祝你的 oi 回憶宛若繁星般璀璨。
也許這是你最後一次在洛谷上打比賽,也許不是。
不過,無論如何,祝你在一周後的比賽裡,好運。
當然,這道題也和輪迴有關係。
廣為人知的斐波拉契數列fib(n) 是這麼計算的
也就是 0,1,1,2,3,5,8,13⋯,每一項都是前兩項之和。
小 f 發現,如果把斐波拉契數列的每一項對任意大於 11 的正整數 mm 取模的時候,數列都會產生迴圈。
當然,小 f 很快就明白了,因為 (fib(n−1)modm) 和 (fib(n−2)modm) 最多只有 m2 種取值,所以在 m2 次計算後一定出現過迴圈。
甚至更一般地,我們可以證明,無論取什麼模數 mm,最終模 mm 下的斐波拉契數列都會是 0,1,⋯,0,1,⋯。
現在,給你乙個模數 m,請你求出最小的 n>0,使得 fib(n)modm=0,fib(n+1)modm=1。
輸入格式:
輸入一行乙個正整數 m。
輸出格式:
輸出一行乙個正整數 n。
輸入樣例#1: 複製
2輸出樣例#1: 複製
3輸入樣例#2: 複製
6輸出樣例#2: 複製
24樣例 1 解釋
斐波拉契數列為 0,1,1,2,3,5,8,13,21,34,⋯,在對 22 取模後結果為 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, \cdots0,1,1,0,1,1,0,1,1,0,⋯。
我們可以發現,當 n=3 時,f(n)mod2=0,f(n+1)mod2=1,也就是我們要求的 n 的最小值。
資料範圍
對於 30% 的資料,m≤18;
對於 70% 的資料,m≤2018;
對於 100% 的資料,2≤m≤706150=0xac666
。
提示如果你還不知道什麼是取模 (mod),那我也很樂意告訴你,模運算是求整數除法得到的餘數,也就是豎式除法最終「除不盡」的部分,也即amodm=k⟺a=bm+k(m>0,0≤k
如果你使用c
/c++
,你可以使用%
來進行模運算。
如果你使用pascal
,你可以使用mod
來進行模運算。
/*這到底是起點還是終點呢?
這道題很簡單,暴力就可以水過,甚至不要打表啥的
滾動地使用a,b,c三個變數,a是第乙個數,b是第二個數,c是第三個數
其他的看程式就好 很容易理解的
*/#include
using
namespace
std;
inta,b,c,ans;
intmain()
a = b%mod;
b = c%mod;
}return0;
}
P4994 終於結束的起點
講道理,洛谷上面許多題讓我知道了什麼叫做理科生的浪漫 這道題拿道題面的時候,第一反應就是斐波那契數列,具體實現這裡就不贅述了。題目中說求最小的f i m0 f i 1 m1這個情況時的i,第乙個想法就是用乙個無限迴圈,一直模擬斐波那契數列,每一次求出來的斐波那契都進行一次判斷,此時找出來的第乙個斐波...
洛谷P4994 終於結束的起點 題解
求讚,求回覆,求關注 這道題和斐波那契數列的本質沒有什麼區別。這道題應該就是乙個斐波那契數列的計算吧,為了防止數字過大,我們可以每次 m 為了防止時間過長,我們可以用遞推 為了防止陣列開炸,我們可以只記錄當前和上一項 於是這道題聽說還是一道原題?但賽後去看了看,真的比原題水一些呀。includeus...
洛谷P4994 終於結束的起點 題解
求讚,求回覆,求關注 這道題和斐波那契數列的本質沒有什麼區別。這道題應該就是乙個斐波那契數列的計算吧,為了防止數字過大,我們可以每次 m 為了防止時間過長,我們可以用遞推 為了防止陣列開炸,我們可以只記錄當前和上一項 於是這道題聽說還是一道原題?但賽後去看了看,真的比原題水一些呀。includeus...