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];
        }
    }
}
posted @ 2026-08-28 13:11  kzssCCC  阅读(5)  评论(0)    收藏  举报