序號:#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 ...