Phi hàm Euler

MrThaodaica - 29/04/2020

Định nghĩa: ϕ(N) là số số nguyên tố cùng nhau với N trong đoạn từ 1 đến N.

 

Cách tính:

Ta đã biết phân tích một số ra thừa số nguyên tố (factorization) là biểu diễn số đó dưới dạng tích của các số nguyên tố. Dễ dàng chứng minh rằng cách biểu diễn là duy nhất. Ví dụ:

  • 8=23

  • 11=11

  • 36=22 . 33

  • 935=5.11.17

  • 5136=24.3.107

Từ cách phân tích một số ra thừa số nguyên tố, ta tính được phi hàm Euler của số đó.

 

int phi(int n) {
    int res = n;
    for (int i = 2; i * i <= n; ++i) {
        if (n % i == 0) {
            while (n % i == 0) {
                n /= i;
            }
            res -= res / i;
        }
    }
    if (n != 1) {
        res -= res / n;
    }
    return res;
}

Độ phức tạp của thuật toán  O(√N)

Một công thức thường gặp để tính phi:

ϕ(N)=n(11/p1)(11/p2)(11/p3)....(11/pk)

(p1,p2,...,pk là các ước nguyên tố của n).

Ví dụ:

ϕ(6)=6(11/2)(11/3)=2

Cài đặt:

int eulerPhi(int n) { // = n (1-1/p1) ... (1-1/pn)
    if (n == 0) return 0;
    int ans = n;
    for (int x = 2; x*x <= n; ++x) {
        if (n % x == 0) {
            ans -= ans / x;
            while (n % x == 0) n /= x;
        }
    }
    if (n > 1) ans -= ans / n;
    return ans;
}

 

Trong trường hợp đặc biệt, N=pkϕ(N)=pk-1(p1)

 

CÁC PHẢN HỒI

Back to Top