C_C++

(C언어) 친화수 판별하는 프로그램

고니자니 2023. 5. 1. 20:03
반응형

두 수의 쌍이 있을 때, 각각의 수의 약수를 모두 더한 값이 서로 같으면 친화수입니다.

예를 들어, 220과 284는 친화수입니다. 220의 약수는 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110이며, 이들을 모두 더한 값은 284입니다. 284의 약수는 1, 2, 4, 71, 142이며, 이들을 모두 더한 값은 220입니다.

 

친화수의 예

220과 284
1184와 1210
2620과 2924
5020과 5564
6232와 6368

 

아래는 두 수를 입력받아 친화수인지 판별하는 C언어 코드입니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

// 두 수의 약수의 합을 구하는 함수
int get_divisor_sum(int num) 
{
    int sum = 0;
    for (int i = 1; i < num; i++) 
    {
        if (num % i == 0)
            sum += i;
    }
    return sum;
}

// 두 수가 친화수인지 판별하는 함수
int is_amicable(int num1, int num2) 
{
    int sum1 = get_divisor_sum(num1);
    int sum2 = get_divisor_sum(num2);
    if (sum1 == num2 && sum2 == num1) 
        return 1;
    else
        return 0;
}

int main() {
    int num1, num2;
    
    printf("두 수를 입력하세요: ");
    scanf("%d %d", &num1, &num2);
    
    if (is_amicable(num1, num2)) 
        printf("%d와 %d는 친화수입니다.\n", num1, num2);
    else
        printf("%d와 %d는 친화수가 아닙니다.\n", num1, num2);
        
    return 0;
}

 

반응형