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

C++で指定した範囲内にある2つの数値の公倍数(グレータイル)の個数を求める方法

問題概要

2つの整数 AB、および数値の範囲を定義する STARTEND が与えられます。A 番目のタイルには白いペンキが、B 番目のタイルには黒いペンキが塗られています。そして、白と黒の両方のペンキが塗られたタイルは灰色(グレー)になるとします。

このとき、START から END の範囲内に存在する「グレーのタイル」、つまり A と B の両方の公倍数となっている数の総数を求めることがゴールです。

解き方は非常にシンプルです。START から END までの数値を順番に走査し、それぞれの数が A と B の両方の倍数であるかを判定します。条件を満たしていればカウントを1ずつ増やしていきます。

入力例・出力例

入力1

START=10 END=20 A=3 B=6

出力1

Common multiples of A and B ( grey tiles ): 2

説明: 範囲内では 12 と 18 が 3 と 6 の両方の倍数(公倍数)に該当するため、答えは 2 となります。

入力2

START=1 END=100 A=10 B=11

出力2

Common multiples of A and B ( grey tiles ): 0

説明: 10 と 11 は互いに素であるため、範囲内に共通の倍数は存在しません。

アプローチの手順

  • 範囲を表す整数 START と END を受け取ります。

  • 対象となる2つの整数 A と B を受け取ります。

  • 関数 countGrey(int start, int end, int a, int b) が範囲と a、b を引数として受け取り、a と b の両方の倍数の個数を返します。

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

  • for ループを使って i = start から i = end まで順に走査します。

  • i % a == 0 かつ i % b == 0 が成り立てば、「i」は a と b の両方の倍数(タイルがグレー)です。

  • すべてのループが終わった時点で、count には a と b の公倍数の総数が格納されています。

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

C++サンプルコード

#include <bits/stdc++.h>
using namespace std;
int countGrey(int start, int end, int a, int b){
   int count = 0;
   for (int i = start; i <= end; i++){
      if(i%a==0 && i%b==0) // タイルはグレー
         { count++; }
   }
   return count;
}
int main(){
   int START =10, END = 30;
   int A=4, B=3;
   cout <<"Common multiples of A and B ( grey tiles ): "<<
   countGrey(START,END, A, B);
   return 0;
}

実行結果

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

Common multiples of A and B ( grey tiles ): 2

この例では、範囲 10〜30 の中で 4 と 3 の両方の倍数となるのは 12 と 24 の2つであるため、結果は 2 となります。

  1. C++で最小の約数がKとなる範囲内の数値を数える方法

    本チュートリアルでは、指定された範囲内にある数値のうち、「最小の約数(最小の素因数)」が K と一致するものの個数を求めるC++プログラムについて解説します。 問題の概要 範囲 [a, b] と整数 K が与えられたとき、この範囲に含まれる数値の中で「最小の約数が K であるもの」を数えるのが目的です。 ある数 n の最小の約数が K になるためには、次の2つの条件を満たす必要があります。 n が K で割り切れること 2 以上 K 未満のいずれの整数でも n が割り切れないこと また重要な点として、K が素数でない場合、条件を満たす数は存在しません(合成数が「最小の約数」となることはな

  2. 【C++】2つの数の公約数の個数を効率的に求めるプログラム

    この記事では、2つの数に共通する約数(公約数)がいくつあるかを数える方法を解説します。すべての公約数を実際に列挙するのではなく、その「個数」だけを効率的に求めることが目的です。例えば、12と24という2つの数を考えてみましょう。12と24の公約数は、1、2、3、4、6、12の6つです。したがって、答えは6となります。アルゴリズムの考え方すべての公約数を1つずつ調べるのは非効率です。ここで重要なのが、「2つの数aとbの公約数は、必ずgcd(a, b)(最大公約数)の約数になる」という性質です。つまり、gcd(a, b)の約数の個数を数えれば、それがそのまま公約数の個数になります。さらに、約数の個