學習筆記 杜教篩

2022-04-07 09:42:05 字數 1317 閱讀 8732

dirichlet 卷積, 數論分塊

​ 杜教篩用於解決數論函式 \(f(n)\) 的字首和問題, 即求 :

\[s(n)=\sum_^f(i)

\]​ 對於任意數論函式 \(g(n)\) , 都有

\[\sum_^\sum_f(d)g\left(\frac\right)=\sum_^g(i)s\left(\left\lfloor\frac\right\rfloor\right)

\]​ 即

\[\sum_^(f*g)(i)=\sum_^g(i)s\left(\left\lfloor\frac\right\rfloor\right)

\]​ \(ps.\)

\((f*g)\) 表示函式 \(f(n)\) 與 \(g(n)\) 的 \(dirichlet\) 卷積.

證明:

\[\begin

\sum_^\sum_f(d)g\left(\frac\right)

&= \sum_^g(i)\sum_^\rfloor}f(j) \\

&= \sum_^g(i)s\left(\left\lfloor\frac\right\rfloor\right)

\end

\]​ 得證.

\[\begin

&\because\

\sum_^(f*g)(i)=\sum_^g(i)s\left(\left\lfloor\frac\right\rfloor\right)

=g(1)s(n)+\sum_^g(i)s\left(\left\lfloor\frac\right\rfloor\right). \\

&\therefore\

g(1)s(n)=\sum_^(f*g)(i)-\sum_^g(i)s\left(\left\lfloor\frac\right\rfloor\right).

\end

\]​ 後面那段可以用數論分塊解決, 如果能快速求得 \(\sum_^(f*g)(i)\) , 即函式 \((f*g)(n)\) 的字首和, 那麼我們就可以不斷遞迴地求出 \(s(n)\) , 並用 \(map\) 存下已經求得的值

​ 在實際題目中, 我們會根據 \(f(n)\) 來確定 \(g(n)\) , 以快速地求出 \((f*g)(n)\) 的字首和. \(g(n)\) 的選取可以參照下表.

\[\begin

\varepsilon &= \mu *1 \\

id &= \varphi * 1 \\

\varphi &= \mu * id

\end

\]​ 關於這些函式的意義詳見 dirichlet卷積 莫比烏斯函式 莫比烏斯反演 學習筆記

學習筆記 杜教篩

這是一種通過建構函式 g x 來求一類積性函式字首和的做法,方法比較精妙 考慮我們要求函式 f 的字首和 s n sum n f i 已經有構造好的積性函式 g 將 f,g 做狄利克雷卷積,此時推式子可以得到 sum n f g k sum n sum f d g frac sum n g d su...

學習筆記 杜教篩

入門好部落格 杜教篩 pengym 求一些方便構造卷積形式的積性函式的字首和 不是積性函式如果可以變成卷積形式也可以做 構造h f g,然後推h的字首和,就可以把f字首和遞迴處理 所以,h,g字首和必須可以快速求 有時候,杜教篩的思想也值得借鑑。也是一些題目的解決方法。由於可以記憶化,所以在多次詢問...

杜教篩學習筆記

設有四個數論函式 bf h,f,g,s 滿足 mathbf h mathbf f mathbf g mathbf s n sum limits n mathbf f i sum limits n mathbf h i sum limits n sum limits mathbf g d mathbf...