顯然這道題目和兩個函式沒有任何關係,僅僅是為了考察你是否會線性篩法以及用於權值的計算。
我們設fk(
n)f_k(n)
fk(n)
表示k個數乘積為n的權值和。那麼就有:fk(
n)=∑
k∣nf
p(k)
×fk−
p(nk
)f_k(n)=\sum_ f_(k)\times f_(\frac)
fk(n)
=k∣n
∑fp
(k)
×fk−
p(k
n)然後觀察一下這乙個算式的特性,我們發現其實p
pp在這裡可以是任意的乙個數。
那麼我們將這裡的一次操作記為一次卷積。那麼我們發現在這裡其實就是做k次卷積。
因此我們需要用到狄利克雷卷積演算法。由於該卷積支援快速冪,我們可以使用卷積快速冪來實現。
具體做法如下:
我們可以用倍數法完成卷積,時間複雜度o(n
logn
)o(n\ \mathrm\ n)
o(nlogn).
#include
#include
#include
using
namespace std;
const
int n =
2e5;
const
int p =
998244353
;int cnt =
0, n, k;
int phi[n]
, mul[n]
, vis[n]
, prime[n]
, f[n]
, g[n]
, res[n]
;int
read
(void
)void
init
(void
) mul[i*prime[j]]=
-mul[i]
; phi[i*prime[j]
]= phi[i]
*(prime[j]-1
);}}
g[1]=
1;for(
int i=
1;i<=n;
++i) f[i]=2
* phi[i]
+ mul[i]
;return;}
void
mul(
void
)void
mulself
(void
)void
power
(int k)
for(
int i=
1;i<=n;
++i)
return;}
intmain
(void
)
狄利克雷卷積 狄利克雷卷積學習筆記
前置知識 1 常見的完全積性函式 恒等函式 i i n 1 單位函式 id id n n 元函式 epsilon epsilon n n 1 元函式卷積任何函式 f 都是 f 本身 2 常見積性函式 尤拉函式 varphi n 是小於n和n互質的自然數個數 莫比烏斯函式 mu n sigma sig...
狄利克雷卷積
積性函式 f 和 g 狄利克雷卷積的形式 f ast g n sum limits f d g frac 或者 f ast g n sum limits f i g j 它滿足證明 f ast g ast h sum limits sum limits f d g frac h frac 等同於 f...
狄利克雷卷積
狄利克雷卷積 是定義在數論函式間的一種二元運算,可以定義為 f g n sum limits f x g y 或 f g n sum limits f d g frac 若 f,g 均為積性函式,則 f g 也是積性函式。顯然 f g 1 f 1 g 1 1 設 n perp m 則 begin f...