Jordan Totient 函数(高维欧拉函数)
定义 Jordan Totient 函数:
\[J_k(n) = n^k \cdot \prod_{p\mid n}{(1-\frac{1}{p^k})}
\]
当 \(k=1\) 时,退化为欧拉函数.
可以进行欧拉反演,即:
\[\gcd^k(a,b) = \sum_{d\mid \gcd(a,b)}{J_k(d)}
\]
Jordan Totient 函数是积性函数,比如 \(J_2\) 筛法如下:
const int MAXN = 1e5;
vector<int> prime;
bool f[MAXN+1];
ll J[MAXN+1];
void init(){
fill(f,f+MAXN+1,true);
f[0] = f[1] = false;
J[1] = 1;
for (int i=2;i<=MAXN;i++){
if (f[i]){
prime.push_back(i);
J[i] = (ll)i*i-1;
}
for (auto& v:prime){
if ((ll)v*i>MAXN) break;
f[v*i] = false;
if (i%v==0){
J[i*v] = J[i]*v*v;
break;
}
J[i*v] = J[i]*J[v];
}
}
}

浙公网安备 33010602011771号