LOJ 162 快速冪2 快速冪

2022-06-19 17:03:08 字數 1194 閱讀 6298

題目鏈結

\(description\)

給定\(x,t\),\(t\)次詢問,每次給定\(k\)求\(x^k\% 998244352\)。

\(x,k\lt 998244352,\ t\leq 5\times10^6\)。

\(solution\)

做法1:

直接快速冪就行了。沒過的是\(5e6\)還沒用快讀的(所以時限應該改0.5s)。

做法2:

常規以\(2\)為底的快速冪:\(x^n=x^\rfloor\times2}\times x^\)。

同理可以改成以\(3\)為底:\(x^n=x^\rfloor\times3}\times x^\)。(但是不能位運算優化,不如常規寫法)

int fp(ll x,int k)

同理可以改成以任意數\(k\)為底:\(x^n=x^\rfloor\times k}\times x^\)。

取\(k=\sqrt\),則只需預處理\(x^0,x^k,x^,...,x^\rfloor\times k}\),以及\(x^0,x^1,...,x^\),複雜度\(o(k)\)。

詢問就是\(o(1)\)的了。

細節:最好取\(k=\sqrt+1\)?應該問題不大但是基本都加了\(1\)。。

//308ms	1.0mb

#include #define pc putchar

#define maxin 300000

#define gc() getchar()

//#define gc() (ss==tt&&(tt=(ss=in)+fread(in,1,maxin,stdin),ss==tt)?eof:*ss++)

#define pb emplace_back

#define mod 998244352

typedef long long ll;

const int n=1e5+5,k=(int)(sqrt(mod))+1;

int a[n],b[n];

char in[maxin],*ss=in,*tt=in;

inline int read()

int fp(ll x,int k)

int main()

快速冪 普通快速冪 矩陣快速冪

題意 n個人排隊,f表示女,m表示男,包含子串 fmf 和 fff 的序列為o佇列,否則為e佇列,有多少個序列為e佇列。分析 矩陣快速冪入門題。下面引用巨巨解釋 用f n 表示n個人滿足條件的結果,那麼如果最後乙個人是m的話,那麼前n 1個滿足條件即可,就是f n 1 如果最後乙個是f那麼這個還無法...

快速冪(整數快速冪 矩陣快速冪)

1 整數快速冪 例如求x 8 就是x x x x x x x x 正常的運算方式是,x的值乙個個往上乘上去,乘法運算執行7次 x x x x x x x x 也可以採用這種運算方式,先進行乘法得到x 2再對x 2進行三次乘法。這種運算要明顯比第一種情況要快 所以對於整數快速冪,也是結合了這種思想 x...

快速冪(矩陣快速冪)

求 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 會超時,這裡引入快速冪來...