C++中重複除以除數後的最大和


在這個問題中,我們給定一個整數 N。我們的任務是建立一個程式,該程式將在 C++ 中找到重複除以除數後獲得的最大和。

程式描述 - 我們將遞迴地除以數字 N,直到它變成 1,然後將所有除數加起來並找到所有除數中的最大值。

讓我們舉個例子來理解這個問題,

輸入 - N = 12

輸出 - 22

解釋 - 讓我們遞迴地除以數字並找到總和。

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

為了解決這個問題,我們將透過將 N 除以 N 的最小除數來使各個值的**最大化**,從而找到最大和。

示例

程式說明解決方案的工作原理,

 即時演示

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

輸出

The maximum sum after repeatedly dividing 12 by divisor is 22

更新於: 2020年6月3日

90 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.