C ++中的Pierpont Prime

在这个问题上,给我们一个数字n。我们的任务是打印所有小于n的Pierpont质数

Pierpont质数是一种特殊形式的质数,其形式为

p = 2时。3 k + 1。

其中p是质数,而i和k是一些整数。

让我们举个例子来了解这个问题,

输入-n = 50

输出− 2,3,5,7,13,13,17,19,37

为了解决这个问题,我们必须找到所有遵循条件的素数。为此,我们将找到一个幂数为2和3的数字,并找到所有质数。并打印这两个数字,即遵循条件的质数。

示例

展示我们解决方案的实现的程序,

#include <bits/stdc++.h>
using namespace std;
void printPierpontPrimes(int n){
   bool arr[n+1];
   memset(arr, false, sizeof arr);
   int two = 1, three = 1;
   while (two + 1 < n) {
      arr[two] = true;
      while (two * three + 1 < n) {
         arr[three] = true;
         arr[two * three] = true;
         three *= 3;
      }
      three = 1;
      two *= 2;
   }
   vector<int> primes;
   for (int i = 0; i < n; i++)
   if (arr[i])
      primes.push_back(i + 1);
   memset(arr, false, sizeof arr);
   for (int p = 2; p * p < n; p++) {
      if (arr[p] == false)
         for (int i = p * 2; i< n; i += p)
            arr[i] = true;
   }
   for (int i = 0; i < primes.size(); i++)
      if (!arr[primes[i]])
      cout<<primes[i]<<"\t";
}
int main(){
   int n = 50;
   cout<<"All Pierpont Prime Numbers less than "<<n<<" are :\n";
   printPierpontPrimes(n);
   return 0;
}

输出结果

All Pierpont Prime Numbers less than 50 are :
2    3    5    7    13    17    19    37