在 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
广告