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

C++で2から10までのすべての数で割り切れる数を数えます


たとえば、numという数値が与えられ、タスクは、2、3、4、5、6、7、8、9、および10で割り切れる1からnumの範囲の数値の数を計算することです。

>

入力 − int num =10000

出力 −2から10までのすべての数で割り切れる数は次のとおりです。3

説明 − 2から10までのすべての数値で割り切れる1から10000までの3つの数値があり、それらは−

2520-: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 18, 20, 21, 24, 28, 30, 35, 36, 40, 42, 45, 56, 60, 63, 70, 72, 84, 90, 105, 120, 126, 140, 168, 180, 210, 252, 280, 315, 360, 420, 504, 630, 840, 1260, 2520.
5040-: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 28, 30, 35, 36, 40, 42, 45, 48, 56, 60, 63, 70, 72, 80, 84, 90, 105, 112, 120, 126, 140, 144, 168, 180, 210, 240, 252, 280, 315, 336, 360, 420, 504, 560, 630, 720, 840, 1008, 1260, 1680, 2520, 5040
7560-: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 18, 20, 21, 24, 27, 28, 30, 35, 36, 40, 42, 45, 54, 56, 60, 63, 70, 72, 84, 90, 105, 108, 120, 126, 135, 140, 168, 180, 189, 210, 216, 252, 270, 280, 315, 360, 378, 420, 504, 540, 630, 756, 840, 945, 1080, 1260, 1512, 1890, 2520, 3780.

入力 − int num =20000

出力 − 2から10までのすべての数で割り切れる数は、− 3

です。

説明 − 2から10までのすべての数値で割り切れる1から10000までの7つの数値があり、それらは− 2520、5040、7560、10080、12600、15120、および17640です。

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

与えられた問題を解決するための複数のアプローチ、すなわちナイーブなアプローチと効率的なアプローチがあります。それでは、最初にナイーブなアプローチを見てみましょう。 。

  • 数字を入力します。たとえば、num

  • 配列を取り、2から10までのすべての数値を9である固定長の整数配列内に格納します。

  • 最初に一時変数を取り、数値の合計を格納するためのカウントであり、もう1つは、数値が除算可能かどうかをチェックするためのフラグです。

  • iから1までのループを開始します

  • ループ内で、numをiに設定し、indexを0に設定します

  • インデックスが9未満になるまで、つまり配列のサイズになるまで開始します

  • IF num%arr [index ++] ==0を確認してから、フラグを1に設定します。それ以外の場合はフラグを0に設定します

  • IFフラグが1であることを確認してから、カウントを1ずつ増やします

  • 返品数

  • 結果を印刷します。

効率的なアプローチ

ご覧のとおり、2から10までのすべての数字で割り切れるパターンが数字にあります。

2から10までのすべての数値で割り切れる最小の数値は2520です

5 * 7 * 8 * 9 = 2520(n = 1)
5 * 7 * 8 * 9 * 2 = 5040(n = 2)
5 * 7 * 8 * 9 * 3 = 7560(n = 3)
.
.

ご覧のとおり、2520は、2、3、4、5、6、7、8、9、10で割り切れるすべての数値の公約数です。したがって、指定された数値を2520で割ると、結果が得られます。

コード-1(ナイーブアプローチ)

#include <bits/stdc++.h>
using namespace std;
int count(int num){
   int count = 0;
   int flag=0;
   int index=0;
   int arr[9] = {2, 3, 4, 5, 6, 7, 8, 9, 10 };
   for (int i = 1; i <= num; i++){
      int num = i;
      index=0;
      while(index<9){
         if(num % arr[index++] == 0){
            flag=1;
         }
         else{
            flag=0;
            break;
         }
      }
      if (flag == 1){
         count++;
      }
   }
   return count;
}
int main(){
   int num = 10000;
   cout<<"Count numbers which are divisible by all the numbers from 2 to 10 are: "<<count(num);
return 0;
}

出力

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

Count numbers which are divisible by all the numbers from 2 to 10 are: 3

コード2(効率的なアプローチ)

#include <bits/stdc++.h>
using namespace std;
int main(){
   int num = 10000;
   int count = num / 2520;
   cout<<"Count numbers which are divisible by all the numbers from 2 to 10 are: "<<count;
   return 0;
}

出力

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

Count numbers which are divisible by all the numbers from 2 to 10 are: 3

  1. C++で3と5で割り切れるすべての数値を印刷するプログラム

    このチュートリアルでは、指定された数値より3と5で割り切れるすべての数値を出力するプログラムについて説明します。 このために、Nという数字が与えられます。私たちのタスクは、3と5の両方で割り切れるN未満のすべての数字を印刷することです。 例 #include <iostream> using namespace std; //printing the numbers divisible by 3 and 5 void print_div(int N){    for (int num = 0; num < N; num++){    

  2. C ++を使用して素数を見つけるための最速のアルゴリズムはどれですか?

    エラトステネスのふるいは、nが約1,000万より小さい場合に、nより小さい素数を見つける最も効率的な方法の1つです。 エラトステネスのふるいを実演するプログラムは次のとおりです。 例 #include <bits/stdc++.h> using namespace std; void SieveOfEratosthenes(int num) {    bool pno[num+1];    memset(pno, true, sizeof(pno));    for (int i = 2; i*i< = num;