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
-
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
-
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説明 − 該当するペ