小愛密碼(矩陣快速冪)

2021-09-19 14:14:10 字數 1510 閱讀 5806

序號:#137難度:困難時間限制:1000ms記憶體限制:80m

描述

小愛同學有乙個智慧型密碼鎖。鎖上有九位數字,小愛同學每次會給a,b,c,d,mod,n六個正整數。 題目是這樣的:

f(1) = a, f(2) = bf(1)=a,f(2)=b

f(n) = f(n-1) \cdot f(n-2) \cdot c^d (n \gt 2)f(n)=f(n−1)⋅f(n−2)⋅cd(n>2)

現在小愛同學想計算出 g(n)g(n) 的值(g(n)為f(n)的前n項積),並用該值作為密碼鎖的密碼。

由於結果過大,所以答案 g(n)%mod

輸入多組資料。每組包含 6 個整數,分別代表 a, b, c, d, mod, n. (1<=a,b,c,d,mod,n<=1000000000);資料組數不超過 2000.

輸出輸出 g(n)%mod 的值。

答案保留 9 位有效數字,不足則補 0.

輸入樣例

2 2 2 2 1000 3

7 9 3 4 6 5

複製樣例

輸出樣例

000000064

000000003

複製樣例

其他感謝熱心群眾 佚名 提供賽題

題目鏈結 

#includeusing namespace std;

typedef long long ll;

ll a,b,c,d,mod,n,mod1;

ll powmod(ll a,ll b) return res;}

const int maxn=2;

struct matrix

matrix operator*(matrix const &b)const };

matrix pow_mod(matrix base, ll n)

return res;

}matrix base,fi,ans;

void init()

int phi(int n)

} if(n>1)ans = ans/n*(n-1);

return ans;

}int main()

mod1=phi(mod);

ans=pow_mod(base,n);

ll aa=ans.mat[1][0],bb=(ans.mat[0][0]-1);

ll cc=(aa+bb-n)%mod1+mod1;

c=powmod(c,d%mod1+mod1);

ll sum=(powmod(a,aa)%mod*powmod(b,bb)%mod*powmod(c,cc))%mod;

printf("%09lld\n",sum);

}return 0;}/*

1 1 9 2 6 4

*/

矩陣快速冪 小講

呃.一直在玩,感覺暑假快廢過去了。一篇很好的文章 這是乙個應用吧,原題中有提示要用矩陣快速冪的,這裡有點坑 算是mark 一下 include include includeusing namespace std struct matrix ans,base matrix mul matrix a,...

快速冪(矩陣快速冪)

求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...

快速冪 矩陣快速冪

快速冪 正常情況下求乙個數的冪時間複雜度為o n 而快速冪能把時間複雜度降到o logn 舉個例子 求5的13次方 思想首先把13化為二進位制 1101,即13 1101 8 1 4 1 2 0 1 1 即5 13 58 1 54 1 52 0 5 1 15 5 8 1 5 4 1 5 2 0 5 ...