BZOJ3328 PYXFIB 單位根反演

2022-05-07 18:45:08 字數 1078 閱讀 5200

傳送門

設\[a=\begin1 & 1 \\ 1 & 0\end

\]那麼要求的相當於是

\[\sum_^[k|i]\binoma^i

\]求出其中的 \(a_\) 即可

\[[n \mid k]=\frac\sum_^ \omega_^

\]證明:

若 \(n|k\),那麼根據單位根的消去引理可以得到就是 \(1\)

否則,等比數列求和,發現分子為 \(0\)

所以帶入單位根

\[\sum_^[k|i]\binoma^i=\frac\sum_^\binoma^i\sum_^w_k^=\frac\sum_^\sum_^\binoma^jw_k^

\]由二項式定理得到

\[\frac\sum_^(aw_k^i+i)^n

\]\(i\) 為單位矩陣

這道題 \(k=p-1\)

所以直接求出 \(p\) 的原根 \(g\),令 \(w_k^i=g^i}\) 即可

只要矩乘+快速冪就好了

# include using namespace std;

typedef long long ll;

int k, test, mod, g, pr[233333], cnt;

ll n;

struct matrix

inline matrix operator *(matrix b) const

inline matrix operator +(matrix b) const

inline matrix operator *(int b) const

} ans, i, a;

inline int pow(ll x, int y)

inline void getroot()

if (x > 1) pr[++cnt] = x;

for (i = 2; i <= phi; ++i)

}inline matrix matrixpow(matrix x, ll y)

int main()

return 0;

}

BZOJ3328 PYXFIB 數論 矩陣乘法

第一行乙個正整數,表示資料組資料 接下來t行 每行三個正整數n,k,p t行,每行輸出乙個整數,表示結果 11 2 3 1題解 首先看到斐波那契數列我們肯定要想到矩陣乘法,但是給出的形式並不能直接求,我們試圖將其轉化為矩乘的形式。如果不考慮k的話,我們可以設a表示斐波那契數列的轉移矩陣,然後套用二項...

Poj 3328的一種解法

題目描述 今天上午想把3328題做了,一看發現有點難。於是,便上網搜解題報告,最終還是沒找到乙個解題報告。決定自己把它搞定了。看了discussion,有人說要用優先佇列和dij演算法或者dfs再或者bfs,但是我沒用過優先佇列,上午的時間就拿來簡單的學學優先佇列,再複習一下dij演算法。下午又把題...

BZOJ1052 BZOJ3760 覆蓋問題

原題位址 先說自己的逗比方法 二分答案,把所有點用乙個最小的矩形 框 起來,易證矩形的其中乙個端點是最優解中正方形的乙個端點,然後列舉四個端點後遞迴處理,差不多了 然後 olz黃學長的o n 做法 ac code include include include using namespace std...