ইনপুট হিসাবে আমাদের একটি ধনাত্মক সংখ্যা n দেওয়া হয়েছে। লক্ষ্য হল সম্ভাব্য জোড়ার (i,j) গণনা খুঁজে বের করা যাতে প্রতিটি জোড়ার যোগফল (i+j) থাকে যা মৌলিক এবং n-এর চেয়ে কম। এছাড়াও i !=j এবং i,j>=1 যদি n 4 হয় তবে শুধুমাত্র 1 জোড়া সম্ভব যা (1,2)। এখানে 1+2 =3 প্রাইম এবং 4 এর কম। এছাড়াও 1,2>=1।
আসুন উদাহরণ দিয়ে বুঝতে পারি।
ইনপুট − n=7
আউটপুট − মৌলিক সংখ্যা হিসাবে যোগফল সহ জোড়ার সংখ্যা এবং n-এর চেয়ে কম −3
ব্যাখ্যা − জোড়া হবে (1,2), (1,4), (2,3)। যোগফল 3, 5, 5 মৌলিক এবং 7 এর কম।
ইনপুট − n=10
আউটপুট − মৌলিক সংখ্যা হিসাবে যোগফল সহ জোড়ার সংখ্যা এবং n-এর চেয়ে কম হল −6
ব্যাখ্যা −
জোড়া হবে (1,2), (1,4), (2,3), (1,6), (2,5), (3,4)।
যোগফল 3, 5, 5, 7, 7, 7 মৌলিক এবং 10 এর কম।
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
এই পদ্ধতিতে আমরা প্রথমে ফাংশন check_prime(bool check[], int temp)-এ সিভ অফ সুন্দরম ব্যবহার করে n-এর চেয়ে কম সমস্ত মৌলিক সংখ্যা খুঁজে পাব।
এছাড়াও প্রতিটি বিজোড় সংখ্যা টেম্পের জন্য, সমষ্টি টেম্প আছে এমন স্বতন্ত্র জোড়ার গণনা হবে temp/2।
2 ব্যতীত সমস্ত মৌলিক সংখ্যাই বিজোড় তাই যদি আমরা n-এর থেকে কম কোন মৌলিক সংখ্যা পাই তাহলে জোড়া গণনার জন্য আমরা temp/2 যোগ করব।
-
ইনপুট হিসাবে ভেরিয়েবল n নিন।
-
ফাংশন prime_pair(int n) n নেয় এবং একটি মৌলিক সংখ্যা হিসাবে যোগফল এবং n এর চেয়ে কম যোগ সহ জোড়ার গণনা প্রদান করে।
-
0 হিসাবে প্রাথমিক গণনা নিন।
-
যেহেতু সুন্দরমের চালনি ইনপুট n এর জন্য 2*n+2 এর কম মৌলিক সংখ্যা তৈরি করে। আমরা n এর অর্ধেক কমিয়ে temp_2 এ সংরক্ষণ করি।
-
ফর্মের সমস্ত সংখ্যা ( i+j+2*i*j ) কে True হিসাবে চিহ্নিত করতে দৈর্ঘ্য temp_2 এর একটি অ্যারে চেক[] তৈরি করুন। মিথ্যা হিসাবে সমস্ত উপাদান দিয়ে এটি শুরু করুন৷
-
ফাংশন check_prime(bool check[], int temp) ব্যবহার করে, ফর্মের সংখ্যার (i+j+2*i*j) জন্য সত্য সহ চেক শুরু করুন। এবং এই যোগফল
-
এখন ইনডেক্স i=0 থেকে i
এর জন্য লুপ ব্যবহার করে চেক[] অতিক্রম করুন -
প্রতিটি চেকের জন্য [i] মিথ্যা হিসাবে, মৌলিক সংখ্যা হবে temp=2*i+1।
-
টেম্প পর্যন্ত যোগ করা জোড়া temp/2 হবে।
-
গণনা করতে টেম্প/2 যোগ করুন।
-
ফর লুপের শেষে আমাদের মোট জোড়া থাকবে যার যোগফল প্রাইম এবং n-এর চেয়ে কম হবে।
-
ফলাফল হিসাবে রিটার্ন গণনা।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void check_prime(bool check[], int temp){
for (int i=1; i<=temp; i++){
for (int j=i; (i + j + 2*i*j) <= temp; j++){
check[i + j + 2*i*j] = true;
}
}
}
int prime_pair(int n){
int count = 0;
int temp;
int temp_2 = (n-2)/2;
bool check[temp_2 + 1];
memset(check, false, sizeof(check));
check_prime(check, temp_2);
for (int i=1; i <= temp_2; i++){
if (check[i] == false){
temp = 2*i + 1;
count += (temp / 2);
}
}
return count;
}
int main(){
int n = 10;
cout<<"Count of pairs with sum as a prime number and less than n are: " <<prime_pair(n);
return 0;
} আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেCount of pairs with sum as a prime number and less than n are: 6