斐波那契的整除(思維 & 數論)
阿新 • • 發佈:2018-12-10
題目連結 Time Limit:1000ms Memory Limit:65536K Description 已知斐波那契數列有如下遞迴定義,f(1)=1,f(2)=1, 且n>=3,f(n)=f(n-1)+f(n-2),它的前幾項可以表示為1, 1,2 ,3 ,5 ,8,13,21,34…,現在的問題是想知道f(n)的值是否能被3和4整除,你知道嗎? Input 輸入資料有若干組,每組資料包含一個整數n(1< n <1000000000)。 Output 對應每組資料n,若 f(n)能被3整除,則輸出“3”; 若f(n) 能被4整除,則輸出“4”;如果能被12整除,輸出“YES”;否則輸出“NO”。 Sample Input
這道題目資料量是很大的,別說時間上,就在資料型別裡面也是沒有能裝的下第1e9個斐波那契數的,所以暴力的方法就不要想了,只能就是找規律。只有3、4、12的話,看起來關係是很近的,可以找一下有沒有迴圈節。最後可以找出來:fn 當且僅當n可以被4整除時可以被3整除。同理當且僅當n可以被6整除時可以被4整除,當且僅當n可以被12整除時可以被12整除。所以就是一串if else了。 AC程式碼:
#include <cstdio> using namespace std; int main() { int n; while(~scanf("%d", &n)) { if(n % 12 == 0) printf("YES\n"); else if(n % 6 == 0) printf("4\n"); else if(n % 4 == 0) printf("3\n"); else printf("NO\n"); } return 0; }