C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++は、最大の積と合計がNに等しいNの4つの因子を見つけます。


コンセプト

与えられた整数Nに関して、私たちのタスクは、Nのすべての因子がNの4つの因子の積を出力することを決定することです。

  • 4つの要素の合計はNに等しくなります。
  • 4つの要素の積が最大です。

そのような4つの要因を見つけることが不可能な場合は、「不可能」と印刷することがわかっています。

製品を最大化するために、4つの要素すべてを互いに等しくすることができることに注意してください。

入力

24

出力

All the factors are -> 1 2 4 5 8 10 16 20 40 80
Product is -> 160000

係数20を4回選択します

したがって、20 + 20 + 20 + 20 =24であり、積は最大です。

メソッド

以下は、この問題を解決するための段階的なアルゴリズムです-

  • 最初に、1から「N」の平方根にアクセスして数値「N」の因数を決定し、「i」と「n / i」がNを除算して、それらをベクトルに格納するかどうかを確認します。
  • 次に、ベクトルを並べ替えて、すべての要素を出力します。
  • 3つの数値を決定して、4番目の数値で製品を最大化し、3つのループを実装します。
  • 最後に、次の最大の製品を前の製品に置き換えます。
  • 4つの要素が見つかったら、製品を印刷します。

// C++ program to find four factors of N
// with maximum product and sum equal to N
#include <bits/stdc++.h>
using namespace std;
// Shows function to find factors
// and to print those four factors
void findfactors2(int n1){
   vector<int> vec2;
   // Now inserting all the factors in a vector s
   for (int i = 1; i * i <= n1; i++) {
      if (n1 % i == 0) {
         vec2.push_back(i);
         vec2.push_back(n1 / i);
      }
   }
   // Used to sort the vector
   sort(vec2.begin(), vec2.end());
   // Used to print all the factors
   cout << "All the factors are -> ";
   for (int i = 0; i < vec2.size(); i++)
      cout << vec2[i] << " ";
      cout << endl;
      // Now any elements is divisible by 1
      int maxProduct2 = 1;
      bool flag2 = 1;
      // implementing three loop we'll find
      // the three maximum factors
      for (int i = 0; i < vec2.size(); i++) {
         for (int j = i; j < vec2.size(); j++) {
            for (int k = j; k < vec2.size(); k++) {
               // Now storing the fourth factor in y
               int y = n1 - vec2[i] - vec2[j] - vec2[k];
            // It has been seen that if the fouth factor become negative
            // then break
            if (y <= 0)
               break;
            // Now we will replace more optimum number
            // than the previous one
            if (n1 % y == 0) {
               flag2 = 0;
               maxProduct2 = max(vec2[i] * vec2[j] * vec2[k] *y,maxProduct2);
            }
         }
      }
   }
   // Used to print the product if the numbers exist
   if (flag2 == 0)
     cout << "Product is -> " << maxProduct2 << endl;
   else
      cout << "Not possible" << endl;
}
// Driver code
int main(){
   int n1;
   n1 = 80;
   findfactors2(n1);
   return 0;
}

出力

All the factors are -> 1 2 4 5 8 10 16 20 40 80
Product is -> 160000

  1. Pythonプログラムで最大積と合計がN-Set-2に等しいNの4つの因子を見つけます

    数Nがあるとすると、Nのすべての因子を見つけて、次のようにNの4つの因子の積を返す必要があります。4つの因子の合計はNと同じです。4つの因子の積は最大です。製品を最大化するために、4つの要素すべてを互いに等しくすることができます。 1 2 3 4 5 6 10 12 15 20 30 60であり、製品は50625です。これは、製品を作成するために15が4回選択されているためです。最大。 これを解決するには、次の手順に従います- 要因:=新しいリスト 1から(nの平方根)+ 1の整数までの範囲のiの場合、do n mod iが0と同じ場合、 因子の最後にiを挿入しま

  2. Pythonで最大積と合計がN-Set-2に等しいNの4つの因子を見つけます

    番号Nがあるとします。 Nの因数を見つけて、次のようなNの4つの因数の積のみを返す必要があります- 4つの要素の合計はNと同じです。 4つの要素の積が最大になります。 製品を最大化するために、4つの要素すべてを互いに等しくすることができます。 したがって、入力がN =60のような場合、すべての要素が→1 2 3 4 5 6 10 12 15 20 30 60であるため、出力は50625になり、15が4回選択されているため、それらの積は50625になります。製品を最大にする。 これを解決するには、次の手順に従います- my_map:=新しいマップ v:=新しいリ