오시리스 수란?
오시리스 수(Osiris Number)는 자기 자신의 자릿수들을 재배열해 만들 수 있는 모든 수의 합이 원래의 수와 같아지는 수를 의미합니다. 특히 3자리 수의 경우, 세 개의 자릿수 중 두 개씩을 조합해 만들 수 있는 여섯 개의 두 자리 수를 모두 더한 값이 원래 수와 일치하는지를 확인하게 됩니다.
이 글에서는 3자리 자연수 N이 주어졌을 때, N이 오시리스 수인지 아닌지를 판별하는 방법을 C 언어 코드와 함께 살펴보겠습니다.
예시로 이해하기
입력 : N = 132
풀이 과정
N = 132의 자릿수(1, 3, 2)로 만들 수 있는 두 자리 수는 다음과 같습니다.
13, 12, 21, 23, 32, 31
이 여섯 수를 모두 더하면,
13 + 12 + 21 + 23 + 32 + 31 = 132
원래 수인 132와 정확히 일치하므로, 132는 오시리스 수입니다.
판별 공식
매번 순열을 직접 나열해 더하는 대신, 간단한 수학적 공식으로 빠르게 판별할 수 있습니다. 3자리 수의 일의 자리, 십의 자리, 백의 자리 숫자를 각각 a, b, c라고 하겠습니다.
여섯 개의 두 자리 순열에서 각 자릿수는 십의 자리에 두 번, 일의 자리에 두 번씩 등장합니다. 따라서 전체 합은 다음과 같이 계산됩니다.
합 = 2 × (a + b + c) × 11
즉, 자릿수의 합을 S라고 할 때 N = 22 × S가 성립하면 N은 오시리스 수입니다.
C 언어 구현 예제
#include <stdio.h>
int main() {
int n = 132;
int a = n % 10; // 일의 자리
int b = (n / 10) % 10; // 십의 자리
int c = n / 100; // 백의 자리
int digit_sum = a + b + c; // 자릿수의 합
if (n == (2 * digit_sum * 11)) {
printf("%d는 오시리스 수입니다", n);
}
else {
printf("%d는 오시리스 수가 아닙니다", n);
}
return 0;
}
실행 결과
132는 오시리스 수입니다
참고: 3자리 오시리스 수의 종류
위 공식을 활용하면 3자리 오시리스 수는 132, 264, 396 세 가지뿐이라는 사실도 쉽게 확인할 수 있습니다. 세 수 모두 자릿수의 합(각각 6, 12, 18)에 22를 곱하면 자기 자신이 되기 때문입니다.