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

C++で三乗の和がN(a³+b³=N)となるペア(a, b)の個数を数える


問題の概要

整数Nが与えられたとき、三乗の和がNに等しくなるような正数の順序付きペア(a, b)をすべて見つけ、その個数を求めるのが目標です。

これは、方程式 a3 + b3 = N の解を探索することで実現できます。aはNの立方根以下の範囲で調べ、対応するbは (N − a3) の立方根として計算できます。

具体例で確認しましょう。

入力 

N=35

出力 

a^3+b^3=Nとなるペア(a,b)の個数: 2

説明 

ペアは(2,3)と(3,2)。2^3+3^3=8+27=35

入力 

N=100

出力 

a^3+b^3=Nとなるペア(a,b)の個数: 0

説明 

条件を満たすペアは存在しません。

プログラムで使用するアプローチ

  • 整数Nを受け取ります。

  • 関数cubeSum(int n)はnを受け取り、三乗の和がnになる順序付きペアの個数を返します。

  • ペアを数えるための変数countを0で初期化します。

  • forループを使ってaを探索します。

  • a=1から、nの立方根であるcbrt(n)未満の範囲まで繰り返します。

  • bの三乗bcubeを「n − pow(a,3)」として計算します。

  • bをcbrt(bcube)、つまりbcubeの立方根として求めます。

  • pow(b,3)==bcubeが成立した場合、countを1増やします。

  • すべてのループが終了した時点で、countには条件を満たすペアの総数が格納されています。

  • countを結果として返します。

サンプルコード

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int cubeSum(int n){
   int count = 0;
   for (int a = 1; a < cbrt(n); a++){
      int bcube=n - (pow(a,3));
      int b = cbrt(bcube);
      if(pow(b,3)==bcube)
         { count++; }
   }
   return count;
}
int main(){
   int N = 35;
   cout <<"Count of pairs of (a,b) where a^3+b^3=N: "<<cubeSum(N);
   return 0;
}

出力

上記のコードを実行すると、次のような出力が得られます −

Count of pairs of (a,b) where a^3+b^3=N: 2
  1. C++でXとの合計がフィボナッチ数になるノードを数える方法

    各ノードに数値の重みが割り当てられた二分木が与えられます。この記事の目的は、「ノードの重み + X」の計算結果がフィボナッチ数となるノードの個数を求めることです。フィボナッチ数列とは、0, 1, 1, 2, 3, 5, 8, 13… のように続く数列で、n番目の数は(n−1)番目と(n−2)番目の数の和になります。たとえば重みが13であればフィボナッチ数に該当するため、そのノードはカウント対象となります。入力例1temp = 1 の場合。値を入力すると、以下のような木が構成されます。出力Count the nodes whose sum with X is a Fibonacci number

  2. C++で2つのBSTから合計が指定値xと等しいペアを数える方法

    2つの二分探索木(BST)と整数値 x が与えられます。この記事の目的は、BST_1 から1つのノード、BST_2 からもう1つのノードを選んだペアのうち、両ノードの値の合計が x に一致するものの個数を求めることです。具体的には、BST_1 のノードと BST_2 のノードのデータ部分を加算し、その合計が x と等しければカウントを1つ増やしていきます。具体例で確認してみましょう。入力出力 − 合計が指定値 x に等しい2つのBSTからのペアの数 − 1説明 − 該当するペアは (8, 6) です。入力出力 − 合計が指定値 x に等しい2つのBSTからのペアの数 − 2説明 − 該当するペ