Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C언어로 확인하는 3자리 오시리스 수(Osiris Number)

오시리스 수란?

오시리스 수(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를 곱하면 자기 자신이 되기 때문입니다.