Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 이러한 숫자의 LCM이 N이 되도록 고유한 숫자의 최대 합계

<시간/>

이 문제에서 우리는 숫자 N입니다. 우리의 임무는 C++에서 이러한 숫자의 LCM이 N이 되도록 고유한 숫자의 최대 합을 찾는 프로그램을 만드는 것입니다.

문제 설명

우리는 숫자 N의 모든 인수의 합을 찾아야 합니다. 그리고 최대 합을 찾기 위해 모든 고유한 것을 더해야 합니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력

N = 12

출력

28

설명

All distinct factors of N are 1, 2, 3, 4, 6, 12.
Sum = 1 + 2 + 3 + 4 + 6 + 12 = 28

솔루션 접근 방식

간단한 솔루션은 숫자의 모든 요인을 찾은 다음 결과를 찾기 위해 모든 고유한 요인을 추가하는 것입니다.

이를 위해 우리는 N의 제곱근까지 반복할 것입니다. 그리고 숫자가 N을 나누는지 확인합니다. 그렇다면 구별되는지 확인하고, 그렇다면 숫자와 나눗셈 몫을 추가하고 그렇지 않으면 숫자를 추가합니다. 최종 maxSum을 반환합니다.

예시

솔루션의 작동을 설명하는 프로그램,

#include <iostream>
using namespace std;
int calcMaxSumForLCM(int N){
   int maxSum = 0;
   for (int i = 1; i*i <= N; i++){
      if (N%i == 0){
         if (i == (N/i))
            maxSum = maxSum + i;
         else
            maxSum = maxSum + i + (N/i);
      }
   }
   return maxSum;
}
int main(){
   int N = 17;
   cout<<"The sum of distinct numbers such that LCM if these numbers is "<<N<<" is "<<calcMaxSumForLCM(N);
   return 0;
}

출력

The sum of distinct numbers such that LCM if these numbers is 17 is 18