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

C ++の素数ポイント(数値を2つの素数に分割するポイント)


この問題では、数値Nが与えられます。私たちのタスクは、数値のすべての素数を出力することです。そうでない場合は、素数がない場合は-1を出力します。

プライムポイント 数値を2つの素数に分割するインデックス値です。1つは左側に、もう1つは右側にあります。

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

Input: 2359
Output: 1

説明 :インデックス1で数値を分割する場合。2と59を2つの素数として取得します。

この問題を解決するために、数値の左右の分割が可能かどうかを確認します。有効な場合は、生成できる数値のすべての組み合わせを試し、それらが素数であるかどうかを確認します。プライムの場合は、インデックスを印刷します。

以下のコードは、ソリューションの実装を示しています

#include <bits/stdc++.h>
using namespace std;
int countDigits(int n) {
   int count = 0;
   while (n > 0){
      count++;
      n = n/10;
   }
   return count;
}
int checkPrime(int n) {
   if (n <= 1)
      return -1;
   if (n <= 3)
      return 0;
   if (n%2 == 0 || n%3 == 0)
      return -1;
   for (int i=5; i*i<=n; i=i+6)
      if (n%i == 0 || n%(i+2) == 0)
         return -1;
   return 0;
}
void primePoints(int n) {
   int count = countDigits(n);
   if (count==1 || count==2){
      cout << "-1";
      return;
   }
   bool found = false;
   for (int i=1; i<(count-1); i++){
      int left = n / ((int)pow(10,count-i));
      int right = n % ((int)pow(10,count-i-1));
      if (checkPrime(left) == 0 && checkPrime(right) == 0){
         cout<<i<<"\t";
         found = true;
      }
   }
   if (found == false)
   cout << "-1";
}
int main() {
   int N = 2359;
   cout<<"All prime divisions of number "<<N<<" are :\n";
   primePoints(N);
   return 0;
}

出力

All prime divisions of number 2359 are :
1

  1. グラフ内のアーティキュレーションポイントの数を見つけるためのC++プログラム

    グラフ内のアーティキュレーションポイント(またはカット頂点)は、グラフを削除する(およびグラフを通るエッジ)場合にグラフを切断するポイントです。切断された無向グラフのアーティキュレーションポイントは、接続されたコンポーネントの数を増やす頂点の削除です。 アルゴリズム Begin    We use dfs here to find articulation point:    In DFS, a vertex w is articulation point if one of the following two conditions is satisfi

  2. C++のCHAR_BIT

    CHAR_BITは、charのビット数です。これは、C++言語の「limits.h」ヘッダーファイルで宣言されています。 1バイトあたり8ビットです。 これがC++言語のCHAR_BITの例です 例 #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a = CHAR_BIT*sizeof(x);    stack<bool> s;    cout << "T