Photo by Daniil Silantev / Unsplash

CS - 뫼비우스 함수

Computer Science Aug 4, 2025

Introduction

혹시 궁금해하는 사람을 위해 미리 말해두지만, 이 뫼비우스가 아니다.

Morbius (film)

이분이다.

August Ferdinand Möbius

이름 자체는 수학 함수의 대부분이 그렇듯이 만든 사람 이름 따온 별거 아닌 것 같지만, 그 효과만큼은 대단하다. 오늘은 뫼비우스 함수, 그리고 그것을 확장한 뫼비우스 반전 공식을 살펴보자.

Before We Begin..

시작하기 전에, 함수들이 어떻게 생겼는지 정도만 알아보고 가자. 뫼비우스 함수는 아래와 같이 생겼다.

\[\mu(n) = \begin{cases}
1 & \text{if } n = 1 \\
(-1)^k & \text{if } n \text{ is the product of } k \text{ distinct primes} \\
0 & \text{if } n \text{ is divisible by a square } > 1
\end{cases}\]

뫼비우스 반전 공식은 아래와 같다.

\[f(n) = \sum_{d|n} \mu(d)g(\frac{n}{d}) \text{ for every integer }n \geq 1\]

이제부터 각 함수의 자세한 내막을 알아보자.

The Möbius Function

바로 위에 있긴 하지만, 뫼비우스 함수는 아래와 같이 생겼다.

\[\mu(n) = \begin{cases}
1 & \text{if } n = 1 \\
(-1)^k & \text{if } n \text{ is the product of } k \text{ distinct primes} \\
0 & \text{if } n \text{ is divisible by a square } > 1
\end{cases}\]

즉, 1이면 함수는 1, 제곱수로 나누어지면 함수는 0, 아니면 -1의 소수 개수 제곱을 하면 된다.

아래에서 설명하는 것이 조금 더 적절하겠지만, 미리 예열을 해놓자면, 이는 곧 포함과 배제의 기본 배경을 마련한다.

Example

간단한 예시를 생각해보자. 내가 만일 손으로 \(\phi (n)\)를 구하려고 한다면, 식을 어떻게 세워야 할까?

\(n=p_1^{k_1} \cdot p_2^{k_2} \cdot \cdot \cdot p_n ^{k_n} (p_i \in \mathbb{P} \text{, the set of primes})\)이라 생각해보자. 그럼 \(\phi(n)\)를 전개해보면 아래와 같이 될 것이다.

\[\phi(n) = n - \sum_{p | n} \lfloor \frac{n}{p} \rfloor + \sum_{p_i | n} \sum_{p_j | n \text{ & } i < j} \lfloor \frac{n}{p_i p_j} \rfloor\ - \cdot \cdot \cdot (p_k\text{ are all primes)}\]

여기서 눈여겨볼 점은 각 \( \sum\) 앞의 부호이다. 현재 처리하고 있는 '소인수의 개수'를 \(k\)라고 한다면 항 앞의 부호가 \((-1)^k\)가 된다는 것을 알 수 있다. 어디서 많이 본 듯한 식이다.

Compression

Stage 1 : the basics

자 그럼 저 위에 식을 압축할 방법이 있을까? 생각해보자. 만일 \( \sum\)에서 순회하는 값들을 '소인수'가 아니라 '약수'로 바꾸면 어떨까? 식이 아래와 같이 압축된다 :

\[\phi(n) = \sum_{p | n} (-1)^{\omega (n)} \lfloor \frac{n}{p} \rfloor \]

단순 감으로 보면 이게 끝일 것 같을수도 있지만, 우리가 고려 안한 케이스가 있다.

Stage 2 : squares

\(\phi(18) \)를 생각해보자. 18을 소인수분해한다면 2 * 3 * 3이 나올 것이다. 하지만, 우리는 "2개의 소인수로 구성된" 수들을 셀때 9를 세지는 않는다. 왜 그럴까? 이것은 이미 3때 처리되었기 때문이다. 즉, 우리는 같은 소인수가 2번 이상 반복될 경우 사실상 그것이 없는 것처럼 처리해야 한다는 것을 알 수 있다.

Stage 3 : final cleanup

그럼 지금까지 나온 점들을 정리해보자.

\(\phi(n) = \sum_{p | n} k(x) \lfloor \frac{n}{p} \rfloor \)라는 식이 있다고 해보자. 지금까지의 정보를 조합하여 \(k(x)\)를 서술해본다면,

\[k(x) = \begin{cases}
(-1)^k & \text{if } x \text{ is the product of } k \text{ distinct primes} \\
0 & \text{if } x \text{ is divisible by a square } > 1
\end{cases}\]

1은 소인수 0개라고 정리한다면, 저 식은 사실상 \( \mu(n)\)의 식이 된다.

The Mobius Inversion Formula

자, 그럼 위에서 유도한 사실을 공식으로 정리하면 무엇이 될까? 첫 함수의 \((-1)^{\omega (n)}\)를 \(\mu(n)\)으로 치환한다면 아래와 같은 식이 된다.

\[\phi(n) = \sum_{p | n} \mu (n) \lfloor \frac{n}{p} \rfloor \]

축하한다, 이걸 마지막으로 여러분은 뫼비우스 반전 공식, Mobius Inversion Formula를 유도해낸 것이다.

여기서 포인트는 이것이 일반화가 가능하다는 것이다. 서로 간의 합으로 표현되는(\(f(x) = \sum_{d | x} g(d)\)) 함수들은 이 inversion formula를 통하여 역변환이 가능하다(\(g(x) = \sum_{d | x} \mu(d) f(\frac{x}{d})\)).

Example Problem

다른 예시를 살펴보자. 백준 문제이다.

1557번: 제곱 ㄴㄴ

무언가 익숙해 보인다. 대충 문제의 조건을 식으로 표현하면,

\[\phi(n) = n - \sum_{p}^{p < \sqrt{n}} \lfloor \frac{n}{p^2} \rfloor + \sum_{p_i}^{p_i < \sqrt{n}} \sum_{p_j, i < j}^{p_j < \sqrt{n}} \lfloor \frac{n}{p_i^2 p_j^2} \rfloor\ - \cdot \cdot \cdot \text{(p_k are all primes)}\]

이제는 확실하다. 압축하면,

\[\phi(n) = \sum_{p}^{p < \sqrt{n}} \mu (n) \lfloor \frac{n}{p^2} \rfloor \]

가 된다. 풀이 끝이다. 정답 코드가 궁금하다면 여기에 첨부하였다.

Conclusion

오늘은 정보과학에서 함수의 역함수 계산, 그리고 포함과 배제 구현에 도움이 많이 되는 뫼비우스 함수와 반전 공식에 대하여 알아보았다.

Tags

Lee Sihoo

KSA 25th batch. Loves coding, cats, and coffee.