오일러 토션트 함수(Euler's Totient Function)는 모듈러 곱셈 역원이 존재하는 수의 개수를 구하는 함수이며, 기호로는 ϕ를 사용한다. 즉, 임의의 양의 정수 n에 대해 ϕ(n)은 n 이하의 양의 정수 중 n과 서로소인 것의 개수와 같다. 오일러 피(파이) 함수(Euler's Phi Function)라고도 한다.
오일러 토션트 함수의 결과값은 다음과 같은 두 가지 공식을 이용하여 구할 수 있다.
- p가 소수이고 n=pk일 때, ϕ(n)=pk−1(p−1)이다.
- n과 m이 서로소일 때, ϕ(nm)=ϕ(n)ϕ(m)이다.
n의 소인수를 중복 없이 나열한 결과가 p1,p2,…,pk일 때, ϕ(n)을 다음과 같이 구할 수도 있다.
ϕ(n)=n×p1−1p1×p2−1p2×…×pk−1pk
이 식을 오일러 곱 공식(Euler Product Formula)이라고 한다. 이를 이용하여 오일러 토션트 함수를 구현하면 다음과 같다.
int phi(int n)
{
int s = n;
for(int i = 2; i * i <= n; i++)
{
if(n % i == 0)
{
while(n % i == 0)n /= i;
s = s / i * (i - 1);
}
}
if(n > 1)s = s / n * (n - 1);
return s;
}
오일러 토션트 함수는 다음과 같은 두 가지 성질을 갖는다.
∑d|nϕ(d)=n
gcd(a,n)=1→aϕ(n)≡1(modn)
두 번째 성질은 모듈러 곱셈 역원을 구할 때 유용하게 사용할 수 있다. 그밖에 정다각형의 작도 가능 여부를 오일러 토션트 함수로 판별할 수 있다. ϕ(n)이 2의 거듭제곱일 경우 눈금 없는 자와 컴퍼스만으로 정n각형을 작도할 수 있다.
[연습문제]
BOJ 11689. GCD(n, k) = 1 (Gold I)
n을 소인수분해한 다음 오일러 곱 공식을 이용하여 오일러 토션트 함수의 결과값을 구한다.
'Algorithm > D. Math & Number Theory' 카테고리의 다른 글
56. Karatsuba's Algorithm (0) | 2021.06.09 |
---|---|
55. Permutation Cycle Decomposition (0) | 2021.06.08 |
53. Lucas' Theorem (0) | 2021.06.03 |
52. Chinese Remainder Theorem (0) | 2021.06.03 |
51. Extended Euclidean Algorithm (0) | 2021.06.03 |