JavaScriptで合計と最大公約数(GCD)から元の2つの数値を求める方法
問題
2つの引数を受け取るJavaScript関数を作成する必要があります。1つ目の引数はある2つの数値の合計(sum)を、2つ目の引数はその2つの数値の最大公約数(GCD:HCF)を表します。
関数の目的は、これらの条件を満たす元の2つの数値を見つけ出し、配列として返すことです。
考え方(アプローチ)
2つの数値の最大公約数が gcd であるとき、その2つの数値はどちらも必ず gcd の倍数になります。したがって、合計も必ず gcd の倍数でなければなりません。
この性質を使うと、処理は次のようにシンプルにまとめられます。
sum % gcd !== 0の場合(合計がGCDで割り切れない場合)、条件を満たす数値のペアは存在しないため-1を返します。- 割り切れる場合は、一方の数値を
gcd自体とし、もう一方をsum - gcdとします。sum - gcdもgcdの倍数であるため、このペアの最大公約数は確かにgcdとなり、条件を満たします。
このアルゴリズムは剰余演算を1回行うだけで済むため、時間計算量はO(1)と非常に効率的です。
コード例
const sum = 12;
const gcd = 4;
const findNumbers = (sum, gcd) => {
const res = [];
if (sum % gcd !== 0){
return -1;
}else{
res.push(gcd);
res.push(sum - gcd);
return res;
};
};
console.log(findNumbers(sum, gcd));出力結果
[4, 8]
出力の検証
上記の例では、合計が12、最大公約数が4という条件に対して [4, 8] が返されています。
- 合計:4 + 8 = 12 ✓
- 最大公約数:gcd(4, 8) = 4 ✓
このように、返された2つの数値は与えられた条件を正しく満たしていることが確認できます。
-
JavaScriptで3つの配列に共通する要素の合計を求める方法
問題今回は、3つの数値型配列を引数として受け取るJavaScript関数を作成します。この関数は、3つの配列すべてに共通して存在する要素だけを抜き出し、それらの合計値を返す必要があります。たとえば、次のような配列が与えられた場合を考えてみましょう。const arr1 = [4, 4, 5, 8, 3]; const arr2 = [7, 3, 7, 4, 1]; const arr3 = [11, 0, 7, 3, 4];この場合、3つの配列すべてに存在するのは「4」と「3」なので、期待される出力は 4 + 3 = 7 となります。解決策のコード例以下がその実装コードです。 { le
-
【C++】合計と最大公約数(GCD)が与えられた2つの数を求める方法
この記事では、2つの数 a と b の合計(sum)と最大公約数(GCD)が与えられたときに、元の2つの数を復元する方法を解説します。条件を満たす組み合わせが存在しない場合は -1 を返します。 例えば、合計が 6、GCDが 2 とすると、答えは 4 と 2 になります(4 + 2 = 6、gcd(4, 2) = 2 を満たすため)。 考え方(アプローチ) GCDが分かっているということは、2つの数がどちらもGCDの倍数であることが確定します。この性質を利用すると、次の手順で答えを導き出せます。 候補の生成: 片方の数をGCDそのものと仮定すると、もう片方は「合計 − GCD」となります。