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

C++でa²+b²=c²かつ1≦a≦b≦c≦nを満たすトリプレット(a、b、c)の個数を数える方法

問題概要

整数 n が与えられます。この課題の目的は、以下の2つの条件を満たすトリプレット(3つの数の組み合わせ)を見つけ出し、その個数を求めることです。

  • a2 + b2 = c2

  • 1 ≦ a ≦ b ≦ c ≦ n

この問題は、1 ≦ a ≦ n および 1 ≦ b ≦ n の範囲で二重ループを実行することで解くことができます。各ループ内で c を計算し(c = sqrt(a² + b²))、両方の条件を満たす場合にカウントを増やしていきます。

具体例を使って理解しましょう。

入力 : N = 5

出力 : トリプレットの個数 : 1

説明

a=3、b=4、c=5 のとき、両方の条件が満たされます。

入力 : N = 3

出力 : トリプレットの個数 : 0

説明

条件1と条件2の両方を満たすトリプレットは存在しません。

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

  • 整数 N に、探索対象となる範囲 [1, N] の上限値を格納します。

  • 関数 countTriplets(int n) は n を引数として受け取り、a2+b2=c2 かつ 1 ≦ a ≦ b ≦ c ≦ n を満たすトリプレットの個数を返します。

  • 変数 count は該当するトリプレットの個数を格納し、初期値は 0 です。

  • 変数 sum には a と b の二乗の和を格納します。

  • a = 1 から n まで、また b = a から n までループしながら、sum = a*a + b*b を計算し、その平方根を c(sqrt(sum))とします。

  • 計算した c が c*c == sum を満たし、かつ b ≦ c && c ≦ n である場合(条件1と条件2の両方が成立する場合)に処理を進めます。

  • 現在の a、b、c が両方の条件を満たしているため、count をインクリメントします。

  • a = n、b = n に達するまでこの処理を繰り返します。最終的に count には条件を満たすトリプレットの総数が格納されます。

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

実装例

#include <bits/stdc++.h>
using namespace std;
int countTriplets(int n){
    int count = 0;
    int a,b,c;
    a=b=c=1;
    int sum=0;
    for (a = 1; a <= n; a++) //1<=a<=n{
        for (b = a; b <= n; b++) //1<=a<=b<=n{
            sum = a*a + b*b; //a^2 + b^2 =c^2
            c = sqrt(sum);
            if (c * c == sum && b<=c && c<=n) //1<=a<=b<=c<=n のチェック{
                count++;
                cout<<endl<<"a :"<<a<<" b :"<<b<<" c :"<<c; //トリプレットの表示
            }
        }
    }
    return count;
}
int main(){
    int N = 15;
    cout <<endl<< "Number of triplets : "<<countTriplets(N);
    return 0;
}

出力結果

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

a :3 b :4 c :5
a :5 b :12 c :13
a :6 b :8 c :10
a :9 b :12 c :15
Number of triplets : 4

このように、N = 15 の場合は (3, 4, 5)、(5, 12, 13)、(6, 8, 10)、(9, 12, 15) の4つのトリプレットが条件を満たすことがわかります。計算量は O(n²) となるため、n が大きくなると処理時間が増加する点には注意が必要です。

  1. C++で K mod P = 0 かつ Q mod K = 0 を満たす最小の数 K を求める方法

    問題の概要2つの整数 P と Q が与えられたとき、次の条件を同時に満たす最小の整数 K を求める問題を考えてみましょう。K mod P = 0 かつ Q mod K = 0そのような K が存在しない場合は -1 を出力します。例えば、P = 2、Q = 8 の場合、答えは K = 2 となります。なぜなら、2 mod 2 = 0 であり、8 mod 2 = 0 というように、両方の条件を満たすからです。解法の考え方この問題の鍵となるのは、条件を整理することです。K mod P = 0 より、K は P の倍数であるQ mod K = 0 より、K は Q の約数であるP の倍数の中で最小の

  2. C++で「x + 桁の合計 = n」を満たす数xを見つける方法

    この記事では、ある整数 n が与えられたとき、「x + x の各桁の合計 = n」という条件を満たす数 x を求める問題を解説します。例として、n = 21 の場合を考えてみましょう。このとき答えは x = 15 となります。なぜなら、15 の各桁の合計は 1 + 5 = 6 であり、15 + 6 = 21 となって、与えられた n と一致するからです。解き方のアプローチこの問題はシンプルな方法で解くことができます。1 から n まで順番に数を調べていき、それぞれの数について「その数自身 + 各桁の合計」が n と等しくなるかどうかを確認します。条件を満たす数が見つかった時点で処理を終了し、そ