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

Tổng lớn nhất sau khi chia nhiều lần N cho một số chia trong C ++

Trong bài toán này, chúng ta được cho một số nguyên N. Nhiệm vụ của chúng ta là tạo một chương trình sẽ tìm tổng lớn nhất sau nhiều lần chia N cho một số chia trong C ++.

Mô tả chương trình - chúng ta sẽ chia đệ quy số N cho đến khi nó trở thành một và sau đó cộng tất cả các ước và tìm số lớn nhất của tất cả các ước.

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

Đầu vào - N =12

Đầu ra - 22

Giải thích - hãy chia số một cách đệ quy và tìm tổng.

Division 1: 12/2 = 6
Division 2: 6/2 = 3
Division 3: 3/3 = 1
Sum = 12+6+3+1 = 22

Để giải quyết vấn đề này, chúng ta sẽ tìm tổng lớn nhất bằng cách lấy giá trị lớn nhất của các giá trị riêng lẻ chia N cho ước số nhỏ nhất của N.

Ví dụ

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

#include <bits/stdc++.h>
using namespace std;
int smallestDivisor(int n){
   int mx = sqrt(n);
   for (int i = 2; i <= mx; i++)
      if (n % i == 0)
         return i;
   return n;
}
int calculateMaxSum(int n) {
   long long maxSum = n;
   while (n > 1) {
      int divisor = smallestDivisor(n);
      n /= divisor;
      maxSum += n;
   }
   return maxSum;
}
int main(){
   int N = 12;
   cout<<"The maximum sum after repeatedly dividing "<<N<<" by divisor is "<<calculateMaxSum(N);
   return 0;
}

Đầu ra

The maximum sum after repeatedly dividing 12 by divisor is 22