ব্যালেন্সড প্রাইম হল এমন একটি প্রাইম সংখ্যা যার পূর্ববর্তী এবং পরবর্তী প্রাইম সংখ্যার সাথে পার্থক্য সমান। অর্থাৎ এটি সবচেয়ে নিকটবর্তী আগের এবং পরের প্রাইমের গড়।
একটি প্রাইম সংখ্যা ব্যালেন্সড প্রাইম হতে হলে নিচের সূত্রটি মানতে হবে:
Pn = (P(n-1) + P(n+1)) / 2
যেখানে n হল ক্রমবদ্ধ প্রাইম সংখ্যা সেটে pn-এর ইনডেক্স।
প্রাইম সংখ্যাগুলোর ক্রমবদ্ধ সেট: 2, 3, 5, 7, 11, 13, ...
প্রথম ব্যালেন্সড প্রাইমগুলো: 5, 53, 157, 173, ...
এই সমস্যাটিতে আমাদের একটি সংখ্যা n দেওয়া থাকলে n-তম ব্যালেন্সড প্রাইম সংখ্যা বের করতে হবে।
উদাহরণ:
Input : n = 3 Output : 157
এজন্য প্রাইম সংখ্যা জেনারেট করে একটি অ্যারেতে রাখব। তারপর প্রতিটি প্রাইম সংখ্যা ব্যালেন্সড প্রাইম কিনা তা যাচাই করব। যদি হয়, তবে কাউন্ট বাড়াব এবং কাউন্ট n-এর সমান হলে প্রিন্ট করব।
উদাহরণ কোড
#include <bits/stdc++.h>
#define MAX 501
using namespace std;
int balancedprimenumber(int n) {
bool prime[MAX+1];
memset(prime, true, sizeof(prime));
for (int p = 2; p*p <= MAX; p++) {
if (prime[p] == true) {
for (int i = p*2; i <= MAX; i += p)
prime[i] = false;
}
}
vector<int> v;
for (int p = 3; p <= MAX; p += 2)
if (prime[p])
v.push_back(p);
int count = 0;
for (int i = 1; i < v.size(); i++) {
if (v[i] == (v[i+1] + v[i - 1]) / 2)
count++;
if (count == n)
return v[i];
}
return -1;
}
int main() {
int n = 3;
cout << balancedprimenumber(n) << endl;
return 0;
}
আউটপুট
157