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

C++のすべての配列要素で割り切れる範囲の数値をカウントします


数値の範囲を定義するために、STARTとENDの2つの数値が提供されています。また、正の数の配列Arr[]。目標は、Arr []のすべての要素で割り切れる、[START、END]の範囲内にあるすべての数値を見つけることです。

方法1(ナイーブアプローチ)

これを行うには、STARTからENDまで数値をトラバースし、数値ごとに、その数値が配列のすべての要素で割り切れるかどうかを確認します。はいの場合、カウントをインクリメントします。

方法2(配列要素のLCMによる除算性を確認する)

すべての配列要素のLCMを見つけて、そのLCMで完全に割り切れる[START、END]の範囲内のすべての数値をチェックしてカウントします。

例を挙げて理解しましょう。

入力

START=1 END=20 Arr[]= { 2, 4, 8 }

出力

Numbers that are divisible by all array elements: 2

説明

Numbers 8 and 16 are in the range that are divisible by all array elements.

入力

START=100 END=200 Arr[]= { 230, 321, 490, 521 }

出力

Numbers that are divisible by all array elements: 0

説明

No number between 100 to 200 divisible by any array element.

方法1(ナイーブアプローチ)

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数のSTARTとENDを範囲変数として使用します。

  • 関数divisiblebyArr(int start、int end、int arr []、int len)は、範囲変数と配列を受け取り、すべての配列要素で割り切れる数の数を返します。

  • このような数値の場合、初期変数カウントを0とします。

  • 変数フラグを0とします

  • forループを使用して数値の範囲をトラバースします。 i=開始から終了

  • ここで、数値num =iごとに、whileループを使用して、数値がすべての配列要素で割り切れるかどうかを確認します。

  • すべての要素がnumを完全に分割する場合は、flag=1を設定します。

  • フラグ=1の場合は増分カウント

  • すべてのループの終わりに、カウントは配列のすべての要素で割り切れる総数になります。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;
int divisiblebyArr(int start, int end, int arr[], int len){
   int count = 0;
   int flag=0;
   int index=0;
   for (int i = start; i <= end; i++){
      int num = i;
      index=0;
      while(index<len){
         if(num % arr[index++] == 0)
            { flag=1; }
         else{
            flag=0;
            break;
         }
      }
      if (flag == 1)
         { count++; }
      }
   return count;
}
int main(){
   int START = 5, END = 20;
   int Arr[] = {2,4,8 };
   int len=sizeof(Arr)/sizeof(Arr[0]);
   cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Numbers that are divisible by all array elements: 2

方法2(LCMアプローチ)

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数のSTARTとENDを範囲変数として使用します。

  • 関数getLCM(int a、int b)は、2つの数値を受け取り、whileループを使用して両方で割り切れる最初の数値を見つけることにより、それらのLCMを返します。

  • 関数getLCMArray(int arr []、int n)は、配列とその長さを入力として受け取り、配列のすべての要素のLCMを返します。

  • 最初のLCMをgetLCM(arr [0]、arr [1])として計算します。その後、getLCM(lcm、arr [i])を呼び出して、前のlcmとarr [i]のlcmを連続して見つけます。ここで、i=2からi

  • 関数divisiblebyArr(int start、int end、int arr []、int len)は、範囲変数と配列を受け取り、すべての配列要素で割り切れる数の数を返します。

  • このような数値の場合、初期変数カウントを0とします。

  • 変数lcmをgetLCMArray(int arr []、int len)として取得します。

  • forループを使用して数値の範囲をトラバースします。 i=開始から終了

  • ここで、各数値iについて、それが分割可能なlcmであるかどうかを確認します。 trueの場合、カウントをインクリメントします。

  • すべてのループの終わりに、カウントは配列のすべての要素で割り切れる総数になります。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;
int getLCM(int a, int b){
   int m;
   m = (a > b) ? a : b;
   while(true){
      if(m % a == 0 && m % b == 0)
         return m;
      m++;
   }
}
int getLCMArray(int arr[], int n){
   int lcm = getLCM(arr[0], arr[1]);
   for(int i = 2; i < n; i++){
      lcm = getLCM(lcm, arr[i]);
   }
   return lcm;
}
int divisiblebyArr(int start, int end, int arr[], int len){
   int count = 0;
   int flag=0;
   int lcm=getLCMArray(arr,len);
   for (int i = start; i <= end; i++){
      if(i%lcm==0)
         { count++; }
      }
   return count;
}
int main(){
   int START = 5, END = 20;
   int Arr[] = {2,4,8 };
   int len=sizeof(Arr)/sizeof(Arr[0]);
   cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Numbers that are divisible by all array elements: 2

  1. C++の配列内のすべての素数の積

    いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7

  2. C++を使用してすべての要素が割り切れるような配列要素を見つけます

    要素が少ない配列Aがあるとします。すべての要素をそれで分割できるように、Aから要素を見つける必要があります。 Aが[15、21、69、33、3、72、81]のようであるとすると、すべての数値は3で割り切れる可能性があるため、要素は3になります。 この問題を解決するために、Aの最小の数値を取得し、すべての数値を最小の数値で除算できるかどうかを確認します。はいの場合は数値を返し、そうでない場合はfalseを返します。 例 #include<iostream> #include<algorithm> using namespace std; int getNumber(in