在这个问题中,我们得到一个整数N,我们必须打印所有小于N的安全素数。
安全素数是素数,可以表示为[(2 * p)-1],其中p也是素数。
例子-5 [(2 * 2)+1],7 [(2 * 3)+1]。
让我们举几个例子来更好地理解问题-
Input: N = 12 Output: 5 7 11.
为了解决这个问题,我们将找到所有小于N的质数(为此,我们将使用Eratosthenes的Sieve)。并检查素数是否是安全素数,并打印是否是安全素数。
#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); } //驱动程式码 int main(){ int n = 34; cout<<"safe Prime numbers less than "<<n<<" are :\n"; generateSafePrimes(n); return 0; }
输出结果
小于34的安全素数为-
5 7 11 23