題目描述:
m斐波那契數列f[n]是一種整數數列,它的定義如下:
f[0] = a
f[1] = b
f[n] = f[n-1] * f[n-2] ( n > 1 )
現在給出a, b, n,你能求出f[n]的值嗎?( 0 <= a, b, n <= 10^9 )
由於f[n]可能很大,你只需輸出f[n]對1000000007取模後的值即可
題解:
列出f[n]的前幾項會發現,f[n] = a^f(n-2) * b^f(n-1),f(n)為斐波拉契數列,用矩陣快速冪求解
費馬小定理:a^k % p = a^(k % (p-1)) 其中,p 為質數
a^f(n-2) * b^f(n-1) % p = a^( f(n-2) % (p-1) ) * b^( f(n-1) % (p-1) ) % p
**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int mod = 1e9+7;
int n,x,y;
struct matrix
void copy(int *tmp)
c.d[i][j] = tmp % (mod-1);
}return c;
}};long
long qpow(int x,int k)
return ans;
}long
long solve(int x,int y,int n)
; int b[4] = ;
a.copy(a);
b.copy(b);
while (n)
long
long f=0,g=0;
f=qpow(x,a.d[0][1]);
g=qpow(y,a.d[0][0]);
return (f * g % mod);
}int main()
return
0;}
M斐波那契數列
使用費馬小定理降冪處理以及矩陣的快速冪求法 m斐波那契數列f n 是一種整數數列,它定義如下 f 0 a f 1 b f n f n 1 f n 2 n 1 現在,寫出f 2 f 3 f 4 的值,可以發現,其中,a,b的指數均為斐波那契數,歸納法得 f n a fib n 1 b fib n 費馬...
M斐波那契數列
m斐波那契數列f n 是一種整數數列,它的定義如下 f 0 a f 1 b f n f n 1 f n 2 n 1 現在給出a,b,n,你能求出f n 的值嗎?input 輸入包含多組測試資料 每組資料佔一行,包含3個整數a,b,n 0 a,b,n 10 9 output 對每組測試資料請輸出乙個整...
M斐波那契數列
m斐波那契數列f n 是一種整數數列,它的定義如下 f 0 a f 1 b f n f n 1 f n 2 n 1 現在給出a,b,n,你能求出f n 的值嗎?第一行,包含3個整數a,b,n 0 a,b,n 10 9 輸出乙個整數f n 由於f n 可能很大,你只需輸出f n 對1000000007...