洛谷P4994 終於結束的起點

2022-08-18 22:24:17 字數 1757 閱讀 2888

終於結束的起點

終於寫下句點

終於我們告別

終於我們又回到原點

……

乙個個 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...