এই সমস্যায়, আমাদের একটি পূর্ণসংখ্যা 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);
}
// 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