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

C++の配列内のすべての合成数の積


n個の整数の配列arr[n]が与えられた場合、タスクは配列内のすべての合成数の積を見つけることです。

合成数は、他の2つの整数を乗算して作成される整数です。たとえば、6は整数である2と3を掛けることによって作成できる合成数です。また、それらは素数ではないと言うことができます。

入力

arr[] = {1, 2, 4, 5, 6, 7}

出力

24

説明 −配列の合成数は4と6であり、それらの積は24です。

入力

arr[] = {10, 2, 4, 5, 6, 11}

出力

240

説明 −配列の合成数は10、4、6であり、それらの積は240です。

問題を解決するために以下で使用するアプローチは次のとおりです

  • 配列のすべての要素を繰り返します。

  • 非素数または合成数、つまり1を除く他の数で割り切れる数を見つけます。

  • すべての合成数を掛けます。

  • 結果を返します。

アルゴリズム

Start
Step 1→ Declare function to find the product of consecutive numbers in array
   int product_arr(int arr[], int size)
      declare int max = *max_element(arr, arr + size)
      set vector<bool> prime(max + 1, true)
      set prime[0] = true
      set prime[1] = true
      Loop For int i = 2 and i * i <= max and i++
         IF (prime[i] == true)
            Loop For int j = i * 2 and j <= max and j += i
               Set prime[j] = false
            End
         End
      End
      Set int product = 1
      Loop For int i = 0 and i < size and i++
         IF (!prime[arr[i]])
            Set product *= arr[i]
         End
      End
      return product
Stop

#include <bits/stdc++.h>
using namespace std;
//function to find product of consecutive numbers in an array
int product_arr(int arr[], int size){
   int max = *max_element(arr, arr + size);
   vector<bool> prime(max + 1, true);
   prime[0] = true;
   prime[1] = true;
   for (int i = 2; i * i <= max; i++){
      if (prime[i] == true){
         for (int j = i * 2; j <= max; j += i)
            prime[j] = false;
      }
   }
   int product = 1;
   for (int i = 0; i < size; i++)
      if (!prime[arr[i]]){
         product *= arr[i];
      }
      return product;
}
int main(){
   int arr[] = { 2, 4, 6, 8, 10};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"product of consecutive numbers in an array: "<<product_arr(arr, size);
   return 0;
}

出力

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

product of consecutive numbers in an array: 1920

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

    数値の範囲を定義するために、STARTとENDの2つの数値が提供されています。また、正の数の配列Arr[]。目標は、Arr []のすべての要素で割り切れる、[START、END]の範囲内にあるすべての数値を見つけることです。 方法1(ナイーブアプローチ) これを行うには、STARTからENDまで数値をトラバースし、数値ごとに、その数値が配列のすべての要素で割り切れるかどうかを確認します。はいの場合、カウントをインクリメントします。 方法2(配列要素のLCMによる除算性を確認する) すべての配列要素のLCMを見つけて、そのLCMで完全に割り切れる[START、END]の範囲内のすべての数値を

  2. 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