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

C++で素因数が2と3しかない範囲から数を数えます


数値の範囲を定義するために、STARTとENDの2つの数値が提供されています。目標は、素因数が2と3のみで、[START、END]の範囲にある数値を見つけることです。

これを行うには、STARTからENDまで数値をトラバースし、数値ごとに、数値が2と3でのみ割り切れるかどうかを確認します。割り切れる場合は、除算して減らします。そうでない場合は、ループを解除します。結局、数が1に減ると、その要因は2と3だけになります。

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

入力

START=20 END=25

出力

Numbers with only 2 and 3 as prime factors: 1

説明

Prime factors of each number:
20 = 2*2*5
21 = 3*7
22 = 2*11
23 = 1*23
24 = 2*2*2*3
25 = 5*5
Only 24 has 2 and 3 as prime factors.

入力

START=1000 END=1500

出力

Numbers with only 2 and 3 as prime factors: 4

説明

1024 1152 1296 1458 are the numbers with only 2 and 3 as prime factors

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

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

  • 関数twothreeFactors(int start、int end)は範囲変数を受け取り、2と3を素因数としてのみ数を返します。

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

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

  • 次に、数値num =iごとに、whileループを使用してnum%2 ==0かどうかをチェックし、それを除算します。

  • num%3 ==0の場合、それを除算します。そうでない場合は、両方でwhileループを中断します

  • whileループの数が1の場合は、カウントを増やします。

  • すべてのループの終わりに、カウントは素因数として2と4だけを持つ総数になります。

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

#include <bits/stdc++.h>
using namespace std;
int twothreeFactors(int start, int end){
   // Start with 2 so that 1 doesn't get counted
   if (start == 1)
      { start++; }
   int count = 0;
   for (int i = start; i <= end; i++) {
      int num = i;
      while(num>1){
         // if divisible by 2, divide it by 2
         if(num % 2 == 0)
            { num /= 2; }
         // if divisible by 3, divide it by 3
         else if (num % 3 == 0)
            { num /= 3; }
         else //if divisible by neither 2 nor 3 break
            { break; }
      }
      // means only 2 and 3 are factors of num
      if (num == 1)
         { count++; }
   }
   return count;
}
int main(){
   int START = 10, END = 20;
   cout <<"Numbers with only 2 and 3 as prime factors:"<< twothreeFactors(START,END);
   return 0;
}

出力

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

Numbers with only 2 and 3 as prime factors:3

  1. C++で1からNまでの概素数の数を見つける

    数Nがあるとします。1からNの範囲でほぼ素数を見つける必要があります。正確に2つの異なる因子がある場合、その数は概素数と呼ばれます。数には任意の数の非素因数を含めることができますが、2つの素因数である必要があります。したがって、Nが2の場合、出力は2になります。6と10の2つの数値があります。 ここでは、エラトステネスのふるいアプローチを使用します。より良いアイデアを得るために、次の実装を確認してください。 例 #include<iostream> #define N 100005 using namespace std; bool prime[N]; void SieveOfE

  2. 合計とGCDがC++で与えられている2つの数値を見つけます

    2つの数aとbの合計とgcdがあります。数字aとbの両方を見つける必要があります。それが不可能な場合は、-1を返します。合計が6でgcdが2であるとすると、数値は4と2になります。 このアプローチは、GCDが与えられると、その数がその倍数になることが知られているようなものです。次の手順があります 最初の数値をGCDとして選択すると、2番目の数値はsum − GCDになります。 前の手順で選択した数値の合計が合計と同じである場合は、両方の数値を出力します。 それ以外の場合は、数値が存在しないため、-1を出力します。 例 #include <iostream>