合計がnに等しくなる範囲を見つけるC++プログラム
問題の概要
ある数 n が与えられたとき、l < r かつ l + (l + 1) + ... + (r − 1) + r = n を満たす2つの整数 l と r を見つけることを考えます。
例えば、入力が n = 25 の場合、出力は l = −2、r = 7 となります。実際、(−2) + (−1) + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 = 25 が成り立つためです。なお、これ以外の組み合わせも答えとして成立します。
解法のアプローチ
この問題は非常にシンプルで、次の手順で解くことができます。
-(n-1) と n を出力(返却)する
この解法が成り立つ理由は、−(n−1) から n−1 までの整数は正負が対称に並んでいるため、その部分の和は 0 になります。そこに最後の n を加えることで、全体の合計がちょうど n になるからです。
実装例
理解を深めるために、以下の実装を見てみましょう。
#include<bits/stdc++.h>
using namespace std;
void solve(int n){
cout << -(n-1) << ", " << n;
}
int main(){
int n = 25;
solve(n);
}入力
25
出力
-24, 25
-
C++で最小公倍数(LCM)を求めるプログラム:初心者向けに2つの方法を解説
最小公倍数(LCM: Least Common Multiple)とは、2つの整数に共通する倍数の中で最も小さい数のことです。プログラミングの基礎的なアルゴリズム学習においても頻出のテーマであり、C++を使えば簡単に求めることができます。最小公倍数とは?具体例で確認例として、15と9という2つの数を考えてみましょう。それぞれ素因数分解すると次のようになります。15 = 5 × 3 9 = 3 × 3この場合、15と9の両方を割り切れる最小の数、つまり最小公倍数は 45 となります。方法1:大きい方の数から順に増やしていく方法まず紹介するのは、最も直感的なアプローチです。2つの数のうち大きい方
-
C++で2つの数の最大公約数(GCD)を求めるプログラム
最大公約数(GCD)とは最大公約数(GCD: Greatest Common Divisor)とは、2つの整数をどちらも割り切る正の整数のうち、最も大きい数のことです。プログラミングの基礎的なアルゴリズム問題としてよく取り上げられるテーマであり、分数の約分や暗号処理など、さまざまな場面で活用されます。例として、45と27という2つの数を考えてみましょう。45 = 5 × 3 × 327 = 3 × 3 × 3両方の数に共通する素因数は「3 × 3」であるため、45と27の最大公約数は9となります。方法1:ユークリッドの互除法による実装2つの数の最大公約数を求める最も効率的な方法が「ユークリッド