Description
用 D i D_i Di表示 i i i的约数个数, n u m i num_i numi表示 i i i的最小质因子出现次数。
Proof
引理1:
若 n = ∏ i = 1 m p i c i , 则 D i = ∏ i = 1 m c i + 1 (1.1) 若n=\prod_{i=1}^{m}p_i^{c_i}\tag{1.1},则D_i=\prod_{i=1}^{m}c_i+1 若n=i=1∏mpici,则Di=i=1∏mci+1(1.1)
引理2:
若 n = i ∗ j ( g c d ( i , j ) = 1 ) , 则 D n = D i ∗ D j (1.2) 若n=i*j(gcd(i,j)=1),则D_n=D_i*D_j\tag{1.2} 若n=i∗j(gcd(i,j)=1),则Dn=Di∗Dj(1.2)
D D D为积性函数
solution
线性筛
实现:
void pre() {
d[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!v[i])
v[i] = 1, p[++tot] = i, d[i] = 2, num[i] = 1;
for (int j = 1; j <= tot && i <= n / p[j]; ++j) {
v[p[j] * i] = 1;
if (i % p[j] == 0) {
num[i * p[j]] = num[i] + 1;
d[i * p[j]] = d[i] / num[i * p[j]] * (num[i * p[j]] + 1);
break;
}
else {
num[i * p[j]] = 1;
d[i * p[j]] = d[i] * 2;
}
}
}
}