在 C++ 中打印出 N 以下的所有安全质数


本题给定一个整数 N,要求打印出所有值小于 N 的安全质数

安全质数是指可以表示为 [(2*p)- 1] 的质数,其中 p 也是质数。

示例 − 5[(2*2) +1] , 7[(2*3)+1].

我们来举几个例子,以便更好地理解本题 −

Input: N = 12
Output: 5 7 11.

为解决本题,我们将找出所有小于 N 的质数(为此我们将使用埃拉托斯特尼筛法)。检查质数是否为安全质数,如果是,则打印出来。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
void printPrime(int n){
   cout<<n<<"\t";
}
void generateSafePrimes(int n){
   int prime[n + 1];
   for (int i = 2; i <= n; i++)
      prime[i] = 1;
   prime[0] = prime[1] = 0;
   for (int p = 2; p * p <= n; p++) {
      if (prime[p] == 1) {
         for (int i = p * 2; i <= n; i += p)
            prime[i] = 0;
      }
   }
   for (int i = 2; i <= n; i++) {
      if (prime[i] != 0) {
         int temp = (2 * i) + 1;
         if (temp <= n && prime[temp] != 0)
            prime[temp] = 2;
      }
   }
   for (int i = 5; i <= n; i++)
      if (prime[i] == 2)
         printPrime(i);
}
// Driver code
int main(){
   int n = 34;
   cout<<"safe Prime numbers less than "<<n<<" are :\n";
   generateSafePrimes(n);
   return 0;
}

输出

小于 34 的安全质数有 −

5 7 11 23

更新于: 17-Jan-2020

89 次浏览

开启您的职业生涯

完成本课程取得认证

开始学习
广告