斐波那契矩陣冪以及費馬小定理求餘應用

2021-08-07 04:56:10 字數 1826 閱讀 3759

最近遇到費馬小定理的一道應用題,思考了幾個小時,理清了思路,終於證明了費馬小定理求指數餘以及矩陣冪求斐波那契結論;

先入為主(偷懶=_=),上題;

自從薈薈上了奧術課之後,她就覺得自己十分強大,但是萬惡的數學老師說我們現在來討論一下斐波那契數列。薈薈說,我知道。老師說,你知道很好,那麼我們今天我們變形一下。

已知f(0)=a

f(1)=b

f(n)=f(n-1)*f(n-2) (n>=2)

求f(n)

答案mod 1000000007 (1e9+7)

多組資料輸入,每組資料第一行輸入三個整數a,b,n。

0<=a,b,n<=1e16

對於每組資料輸出f(n) mod 1000000007 (1e9+7)

#include#include// a ,b , ab ,a^1b^2 ,a^2b^3 

//可以發現 數列f(n)的指數存在斐波那契的變化趨勢,

//那麼直接根據對應關係求出f(n)的 指數,最後用快速冪即可;

// 其中 矩陣求求斐波那契以及費馬小定理的求餘較難,但仔細想想就可以理解;

// 1.斐波那契數列 :1,1,2,3,5,8……

// 可以由矩陣求的;

// 構造矩陣a 1 0 係數矩陣b 1 1

// 0 1 1 0

//c(0)=a*b^0 = 1 0 c(1) = a*b^1= 1 1 c(2)=a*b^2= 2 1 ……

// 0 1 1 0 1 1

// 恰好 有c(n-1).x[1][0]是 f(n)的a的指數,同時c(n-1).x[0][0]是f(n)的b的指數;

//歸納說明:由此 可根據矩陣冪來求得斐波那契數;

// 2 . 費馬小定理 的應用;

// 有公式: a^(p-1)(mod p)= 1 (p為質數); 結論:(a^(m%(p-1)) )(mod p)=a^m(mod p);

// 證明如下: m=(p-1)*k+l;

// a^m(mod p)=( a^(l)*a^(k*(p-1)) )(mod p)

//= (a^(l)(mod p)*a^(k*(p-1))(mod p) ) (mod p)

//= a^(l)(mod p)

//= a^(m%(p-1)(mod p);

// 證畢;

// 也就是說 反正對指數就可以對其mod(p-1);

// 神奇吧!

//3 還有個小問題:底數可不可以取餘呢? 可以!

// 但是要取餘p,而不是p-1;

// 道理和乘法求餘公式一樣的 :(a*b)(mod p)= (a mod p)*(b mod p )(mod p) ;

using namespace std;

typedef long long ll;

const int mod = 1000000007;

const int mod2 = 1000000006;

struct matrix

}; typedef matrix mat;

mat mul(mat a, mat b)

mat quickmul(mat a,ll n)

return ans;

}ll quickmi(ll a, ll p)

return ans;

}void print(mat a)

else

} }

矩陣快速冪求斐波那契數列

求數a aa的n nn次冪,可以採用二分法進行快速計算,即 a n a cdot a n為偶數 a cdot a cdot a n為奇數 end right.an a n a a a cdot a cdot a cdot a cdots a a cdot a cdot a cdot a 2 cdot...

矩陣快速冪(求斐波那契數列)

矩陣快速冪求斐波那契數列的模板 因為fib n 至於最近的倆個序列有關 及fib n 1 和fib n 2 所以我們儲存最近的那倆個就行了。設f n 表示乙個1 2的矩陣,f n fib n fib n 1 可以看成 a,b a b,b 所以可以變成f n f n 1 a a表示乙個二維矩陣 a 2...

斐波那契(矩陣快速冪)

斐波那契數列,即fib n fib n 1 fib n 2 fib n fib n 1 fib n 2 fib n fib n 1 fi b n 2 就這麼乙個數列,顯然可以直接遞推求解,時間複雜度o n o n o n 似乎沒什麼問題。然後就遇到了這個,n nn的取值範圍最大是2 1 09 2 t...