积性函数
ll get_ll(ll n) {
ll ans = 0;
for (int i = 2; i <= n / i; i++) {
int cnt = 0;
while (n % i == 0)
cnt++, n /= i;
ans*=f(i,cnt);//f(p,k)=f(p^k)
}
if (n > 1)
ans *= f(n, 1);
return ans;
} f[1] = 1;
for (int i = 2; i <= n; i++) {
if (!not_prime[i])
p[++tot] = i, f[i] = cal_f(i, 1);
for (int j = 1; j <= tot && i * p[j] <= n; j++) {
not_prime[i * p[j]] = 1;
if (i % p[j] == 0) {
cnt[i * p[j]] = cnt[i] + 1;
f[i*p[j]]=f[i]/cal_f(p[j],cnt[i])*cal_f(p[j],cnt[i]+1);
brea
}
cnt[i * p[j]] = 1;
f[i*p[j]]=f[i]*cal_f(p[j],1);
}
}
//p数组存放素数
//cnt[n]表示n的最小质因子的次数

Last updated