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

最初のN個の自然数は、C++で与えられた差と互いに素の合計を持つ2つのセットに分割できます。


このチュートリアルでは、1からnまでの自然数が2つに分割されているかどうかを確認する必要があります。以下の条件を満たす必要があります。

  • 2つの級数の合計の絶対差はmである必要があります。

  • また、2つの合計のGCDは1、つまりコプライムである必要があります。

最初のn個の自然数の合計は(n *(n + 1))/2です。合計と差がmであるため、sumOneとsumTwoを見つけることができます。以下の方程式を参照してください。

sumOne + sumTwo = (n*(n+1))/2
sumOne - sumTwo = m

絶対和がmに等しいかどうかを確認します。次に、GCDを確認します。

#include <bits/stdc++.h>
using namespace std;
bool canSplitIntoTwoHalves(int n, int m) {
   int total_sum = (n * (n + 1)) / 2;
   int sumOne = (total_sum + m) / 2;
   int sumTwo = total_sum - sumOne;
   if (total_sum < m) {
      return false;
   }
   if (sumOne + sumTwo == total_sum &&sumOne - sumTwo == m) {
      return (__gcd(sumOne, sumTwo) == 1);
   }
   return false;
}
int main() {
   int n = 10, m = 17;
   if (canSplitIntoTwoHalves(n, m)) {
      cout << "Can split";
   }
   else {
      cout << "Can't split";
   }
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

Can split

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C++で多数を等しい合計の2つ以上のセグメントに分割できるかどうかを確認します

    ここでは、数値を同じ合計で複数のセグメントに分割できるかどうかを確認できるプログラムを確認します。数値が74325のようなものであるとすると、これは3つの部分(7)、(4、3)、(2、5)に分割でき、すべて同じum値になります。 この問題を解決するには、次の手順に従う必要があります。 数字を文字列として取ります 配列を使用して、配列のプレフィックス合計を保持します これで、2番目の要素から最後の要素に移動し、最初のセグメントは0からi-1になり、その合計はprefix_sum[i-1]に配置されます 1からnまでトラバースする別の変数を使用してから、合計を加算し続けます。 合計値がいずれ

  2. C++で指定されたGCDとLCMのペアを検索します

    このセクションでは、指定されたGCD値とLCM値を使用してペアの数を取得する方法を説明します。 GCDとLCMの値が2と12であると仮定します。これで、可能な数値のペアは(2、12)、(4、6)、(6、4)、および(12、2)になります。したがって、私たちのプログラムはペアの数を見つけます。それは4です。 この問題を解決するための手法を理解するためのアルゴリズムを見てみましょう。 アルゴリズム countPairs(gcd, lcm): Begin    if lcm is nit divisible by gcd, then       r