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

C++での素数性テスト


この問題では、数Nが与えられ、それが素数であるかどうかを確認することがタスクです。

素数性テスト ■指定された数が素数であるかどうかをチェックするために使用されるアルゴリズム。

素数は、それ自体でのみ除算できる数です。例:2、3、5、7。

私たちの問題を理解するために例を見てみましょう

Input: 11
Output: Yes

数の素数性テストをチェックする方法は複数あります。

素数性をチェックする簡単な方法の1つは、N未満のすべての数値による数値の除算をチェックすることです。いずれかの数値がNを除算する場合、それは素数ではありません。

すべてのi=2-n-1を確認します。 n / i ==0の場合、素数ではありません。

この方法は、アルゴリズムにこれらの小さな変更を加えることで、より効率的にすることができます。

まず、nではなく√nまでの値をチェックする必要があります。これにより、多くのループ値が節約されます。 √nには、nのすべての可能性のある要因の値が含まれます。

他の変更は、2と3による除算をチェックすることです。次に、5から√nまでのループ値をチェックします。

このアルゴリズムの実装を示すプログラム

#include <iostream>
using namespace std;
bool isPrimeNumber(int n){
   if (n <= 1)
      return false;
   if (n <= 3)
   return true;
   if (n % 2 == 0 || n % 3 == 0)
      return false;
   for (int i = 5; i * i <= n; i = i + 6)
   if (n % i == 0 || n % (i + 2) == 0)
   return false;
   return true;
}
int main() {
   int n = 341;
   if (isPrimeNumber(n))
      cout<<n<<" is prime Number.";
   else
      cout<<n<<" is not prime Number.";
   return 0;
}

出力

341 is not prime Number.

数の素数性からチェックする他のより効果的な方法は、フェルマーの方法を使用することです。 これはフェルマーの小定理に基づいています。

フェルマーの小定理 素数Nの場合、(1、n-1)に属するxのすべての値。以下は真実です

a n-1 ≡ 1 (mod n)
or
a n-1 % n = 1

この定理の実装を示すプログラム

#include <iostream>
#include <math.h>
using namespace std;
int power(int a, unsigned int n, int p) {
   int res = 1;
   a = a % p;
   while (n > 0){
      if (n & 1)
      res = (res*a) % p;
      n = n/2;
      a = (a*a) % p;
   }
   return res;
}
int gcd(int a, int b) {
   if(a < b)
      return gcd(b, a);
   else if(a%b == 0)
      return b;
   else return gcd(b, a%b);
}
bool isPrime(unsigned int n, int k) {
   if (n <= 1 || n == 4) return false;
   if (n <= 3) return true;
   while (k>0){
      int a = 2 + rand()%(n-4);
      if (gcd(n, a) != 1)
         return false;
      if (power(a, n-1, n) != 1)
         return false;
      k--;
   }
   return true;
}
int main() {
   int k = 3, n = 23;
   if(isPrime(n, k)){
      cout<<n<<" is a prime number";
   }
   else
      cout<<n<<" is not a prime number";
   return 0;
}

出力

23 is a prime number

  1. C++でのカプセル化

    カプセル化は、データと、データを操作するメソッドを1つのコンポーネントにまとめ、外部からの干渉から保護します。本質的に、カプセル化には、データとデータを使用する関数をバンドルすることが含まれます。データのカプセル化は、データの非表示という非常に重要な概念につながります。 C ++でのカプセル化は、ユーザー定義のデータ型であるクラスを使用して実装されます。これらのクラスには、データ型と、一緒にバインドされたメソッドが含まれています。 クラスを使用したC++でのカプセル化を表すプログラムは次のとおりです。 例 #include <iostream> using namespace

  2. C++の識別子

    C ++識別子は、変数、関数、クラス、モジュール、またはその他のユーザー定義アイテムを識別するために使用される名前です。識別子は、文字AからZまたはaからzまたはアンダースコア(_)で始まり、その後に0個以上の文字、アンダースコア、および数字(0から9)が続きます。 C ++では、識別子内に@、$、%などの句読文字を使用できません。 C ++は、大文字と小文字を区別するプログラミング言語です。したがって、Manpowerとmanpowerは、C++では2つの異なる識別子です。 受け入れ可能な識別子の例を次に示します- mohd Piyush abc move_na