Computer >> Máy Tính >  >> Lập trình >> C ++

Tổng tối đa của các số khác biệt sao cho LCM của các số này là N trong C ++

Trong bài toán này, chúng ta là một số N. Nhiệm vụ của chúng ta là tạo một chương trình để tìm Tổng lớn nhất của các số phân biệt sao cho LCM của các số này là N trong C ++.

Mô tả vấn đề

Chúng ta cần tìm tổng tất cả các thừa số của số N. Và cộng tất cả các thừa số để tìm tổng lớn nhất.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

N = 12

Đầu ra

28

Giải thích

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

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản sẽ là tìm tất cả các thừa số của số và sau đó cộng tất cả các thừa số riêng biệt để tìm ra kết quả.

Đối với điều này, chúng tôi sẽ lặp lại cho đến căn bậc hai của N. Và kiểm tra xem số đó có chia N. Nếu có, hãy kiểm tra xem nó có phân biệt không, nếu có, hãy thêm số và thương số chia. Nếu không, hãy thêm số. Trả về tối đa cuối cùng.

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

#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;
}

Đầu ra

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