C++で配列内の素数を数える
素数は、1とその数自体で割り切れる数です。それには2つの要素しかありません。最初の要素から最後の要素まで素数であるかどうかを確認し、これまでに見つかった素数の数を増やします。
数Nが素数であるかどうかを確認するには、[2からN / 2]の範囲の数が、Nを完全に除算するかどうかを確認します。そうであれば、素数ではありません。それ以外の場合は素数です。
例を挙げて理解しましょう。
入力 − arr [] ={1,2,3,4,5,6,7,8,9}
出力 −素数の数− 4
説明 −ここで、2,3,5,7は素数であり、1,4,6,8,9は非素数です。
入力 − arr [] ={11,12,4,61,23}
出力 −素数の数− 3
説明 −ここで、11,61,23は素数で、12.4は非素数です。
以下のプログラムで使用されているアプローチは次のとおりです
-
乱数を含む整数配列arr[]を取ります。
-
関数checkPrime(int num)は、渡された数値numが素数であるかどうかをチェックします。素数の場合は1を返し、そうでない場合は0を返します。
-
numが<=1の場合、素数ではないので、0を返します。
-
ここで、2からnum / 2まで、任意の数がnumを完全に除算する場合(num%i ==0)、numは非素数であり、0を返します。
-
それ以外の場合は1を返します。
-
変数isprimeは、数が素数であるかどうかを示します(1は素数を意味します)
-
変数countは、素数の数をarr []
に格納します -
メイントラバース配列全体の内部で、各要素arr [i]をcheckPrime(arr [i])に渡し、結果が1(isprime ==1)の場合は、カウントをインクリメントします。
-
最後のカウントは、arr []
の素数の数です。
例
#include <bits/stdc++.h> using namespace std; // Function to find if number is prime int checkPrime(int num){ if (num <= 1) { return 0; } // Check from 2 to half of arr[i] for (int j = 2; j <= num/2; j++){ if (num % j == 0){ return 0; } return 1; } } int main(){ int arr[] = { 1,3,5,4,8,13,11 }; int n = 7; int count=0; int isprime=0; for(int i=0;i<n;i++){ isprime=checkPrime(arr[i]); if(isprime==1) count++; } cout<<"Count of number of primes in array : "<<count; return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of number of primes in array : 4
-
C++で長方形の正方形の数を数える
=Bとなるように、長さL、幅Bの長方形が与えられます。目標は、サイズLXBの長方形が収容できる正方形の数を見つけることです。 上の図は、サイズ3 X 2の長方形を示しています。2、2X2の正方形、6,1X1の正方形があります。 総正方形=6+ 2=8。 サイズLXBのすべての長方形には、1X1の正方形のL*B数があります。 最大の正方形のサイズはBXBです。 L =B =1の場合、正方形=1。 L =B =2の場合、正方形=1 + 4 =5(2X2の1、1X1の4) L =B =3の場合、正方形=1 + 4 + 9 =14(3X3の1、2X2の4、1
-
C++で設定されたビット数に従って配列をソートします
ここでは、セットビットに基づいて配列をソートするための1つの興味深い問題があります。配列内の要素のセットビット数が多い場合、それはセットビット数の少ない別の要素の前に配置されます。いくつかの数が12、15、7であると仮定します。したがって、設定されたビットは、基本的に2進表現の1の数です。これらは、1100(12)、1111(15)、および0111(7)です。したがって、並べ替えると次のようになります- 1111, 0111, 1100 (15, 7, 12) ここでは、最初にセットビットの数を見つける必要があります。次に、C++STLソート関数を使用してそれらをソートします。セットビット数