1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 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; } } } }
|