不難推出:
|(m-k) k| |(m-k) k | ^(n-1)
f[n]= | | * | |
|0 0| |(m-k) (k-1)|
接下來用矩陣冪乘就可以了!!
#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int mod=1000000007;
struct matrix r,m;
matrix multi( matrix a, matrix b )
void calc(int n)
}int main() {
int n,m,k;
while(cin>>n>>m>>k) {
r.x = r.z = m-k;
r.y = k;
r.w = k-1;
calc( n-2 );
ll ans =( (m-k)*m.x + k*m.z + (m-k)*m.y + k*m.w )%mod ;
cout<< ans <
快速乘 快速冪(矩陣快速冪)
當mod乙個大數p的時候,還有進行乘法的時候可能會爆long long的時候,就用快速乘或者快速冪。參考 先上模板 快速乘 ll multi ll a,ll b,ll m return ans 快速冪 ll pow mod ll a,ll b,ll m return res 快速乘 快速冪 hdu題...
關於快速冪 快速乘 矩陣快速冪
一 快速冪 快速冪是用於解決類似 a b mod p 值型別的問題的。使用普通的方法是從 1 迴圈至 b 再逐次累乘,逐次取模。但這種方法對於 b 很大的時候卻可能會超時。那麼,這時候我們就需要使用快速冪了。快速冪是基於以下式子 若 b mod 2 1 則 a b a frac times a fr...
矩陣快速冪 ZOJ 2853 Evolution
提交上去是ac的,但是在做的過程中有個問題。我是在win上用vs2012編譯的,執行的時候出現stack overflow,然後我換用了code blocks,也出現了同樣的問題,我仔細看了 一步一步除錯,覺得沒有問題,但是執行起來就是出問題。我把n的值改小了點,就可以了。後來我換了linux 的p...