কম্পিউটার

C++ এ প্রাইম হিসাবে জোড় এবং বিজোড় অবস্থানে অঙ্কের যোগফলের পার্থক্য সহ পরিসরে সংখ্যা গণনা করুন


রেঞ্জ ভেরিয়েবল হিসাবে দুটি সংখ্যা শুরু এবং শেষ দেওয়া হয়েছে। লক্ষ্য হল এই পরিসরে [শুরু, শেষ] থাকা সংখ্যার গণনা খুঁজে বের করা এবং প্রাইম হিসাবে জোড় অবস্থানে অঙ্কের যোগফল এবং বিজোড় অবস্থানে অঙ্কের যোগফলের পার্থক্য রয়েছে।

অর্থাৎ (জোড় অবস্থানে অঙ্কের যোগফল)-(বিজোড় অবস্থানে অঙ্কের যোগফল) =একটি মৌলিক সংখ্যা

আসুন উদাহরণ দিয়ে বোঝা যাক।

উদাহরণস্বরূপ

ইনপুট - শুরু =230, শেষ =270

আউটপুট - প্রাইম হিসাবে জোড় এবং বিজোড় অবস্থানে অঙ্কের যোগফলের পার্থক্য সহ পরিসরে সংখ্যার গণনা হল:6

ব্যাখ্যা - শর্ত পূরণকারী 230 থেকে 270 এর মধ্যে সংখ্যা(গুলি) হল:

240 ( 4-2 হল 2), 250 ( 5-2 হল 3), 251 (5-3 হল 2), 261 (6-3 হল 3), 262 (6-4 হল 2), 270 (7-2) হল ৫)।

এই সমস্ত পার্থক্য হল 2, 3 এবং 5 যা প্রাইম।

ইনপুট - শুরু =1101, শেষ =1120

আউটপুট - প্রাইম হিসাবে জোড় এবং বিজোড় অবস্থানে অঙ্কের যোগফলের পার্থক্য সহ পরিসরে সংখ্যার গণনা হল:1

ব্যাখ্যা - 1101 থেকে 1120 এর মধ্যে যে সংখ্যাগুলি শর্ত পূরণ করে তা হল:

1120 (3-1 হল 2)। 2 প্রধান।

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

এটিতে আমরা একটি গতিশীল প্রোগ্রামিং পদ্ধতি ব্যবহার করি এবং সংখ্যার গণনাগুলি সংরক্ষণ করি যেগুলির সমষ্টি এবং বিজোড় অবস্থানের অঙ্কের প্রাইম পার্থক্য রয়েছে। এই অ্যারে হবে arr[size][90][90][2]। এখানে আকার হল 10 এর শক্তি। তাই ইনপুট হিসাবে সবচেয়ে বড় সংখ্যাটি হবে 10 size .

ফাংশন চেক করার প্রতিটি পুনরাবৃত্ত কলে (int place, int eve, int od, int temp, vector vec) আমরা বাম থেকে ডানে 0 থেকে 9 সংখ্যা বসিয়ে একটি সংখ্যা তৈরি করব।

arr[size][x][y][temp] এ, x হল x পর্যন্ত রাখা জোড় অবস্থানে অঙ্কের যোগফল এবং y হল y পর্যন্ত রাখা বিজোড় সংখ্যার যোগফলের জন্য। প্রয়োজনীয় পার্থক্যটি প্রাইম কিনা বা অ্যারে arr_2[] ব্যবহার করে না যা 100 পর্যন্ত সমস্ত মৌলিক সংখ্যা ক্রমানুসারে সংরক্ষণ করে তা পরীক্ষা করুন।

  • ভেরিয়েবলগুলিকে ইনপুট হিসাবে শুরু এবং শেষ নিন।
  • 100 পর্যন্ত প্রাইমগুলির জন্য গ্লোবাল অ্যারে অ্যারে[সাইজ][90][90][2] এবং অ্যারে অ্যারে_2[] নিন।
  • ফাংশন চেক (int place, int eve, int od, int temp, vector vec) স্থান হিসাবে অঙ্কের বর্তমান অবস্থান নেয়, ইভ পজিশন ডিজিটের বর্তমান যোগফল জোড় হিসাবে এবং বিজোড় অবস্থানের সংখ্যাগুলি od হিসাবে, temp এর মান এবং ভেক্টর vec যার সংখ্যা আছে।
  • এটি পুনরাবৃত্তভাবে arr[place][eve][od][temp] এ মানগুলিকে পপুলেট করে।
  • বর্তমান উপাদানের প্রাথমিক মান গণনা=0 হিসাবে নিন।
  • বর্তমান অবস্থানের জন্য, if(place ==vec.size()) ব্যবহার করে স্থানটি শেষ অবস্থান কিনা তা পরীক্ষা করুন। যদি হ্যাঁ সেই অবস্থানটি বিজোড় নাকি জোড় তা পরীক্ষা করে দেখুন৷
  • যদি(vec.size() &1) ফলাফল সত্য হয় তাহলে বর্তমান অবস্থানটি বিজোড় তাই od দিয়ে eve অদলবদল করুন কারণ এটি বিজোড় দৈর্ঘ্যের সংখ্যা।
  • ইভ-ওড হিসাবে যোগফলের পার্থক্য হিসাবে temp_2 গণনা করুন।
  • লুপের জন্য ব্যবহার করে, ট্রাভার্স arr_2[] এবং temp_2 পাওয়া গেছে কিনা তা পরীক্ষা করুন। যদি হ্যাঁ তাহলে এটা প্রাইম। সুতরাং 1 ফেরত দিন অন্য 0 ফেরত দিন।
  • যদি arr[place][eve][od][temp] ইতিমধ্যেই গণনা করা থাকে তাহলে এটি -1 হবে না তাই এটি ফেরত দিন।
  • যদি temp অ-শূন্য হয় তাহলে temp_3=9 সেট করুন। Temp_3 হল সংখ্যার সর্বোচ্চ সীমা যা আমরা রাখতে পারি। যদি এটি 0 হয় তাহলে vec[place] বসান, অন্যথায় সংখ্যাটি ইতিমধ্যেই ছোট তাই যেকোন সংখ্যাটি 9 বলুন।
  • 0 থেকে temp_3 পর্যন্ত সংখ্যা অতিক্রম করুন। যদি বর্তমান অবস্থান বিজোড় হয় তাহলে আপডেট করুন set_odd =set_odd + i; ( পূর্ববর্তী বিজোড় অবস্থান সমষ্টি + বর্তমান অঙ্ক i )।
  • যদি বর্তমান অবস্থান জোড় হয় তাহলে আপডেট করুন set_even =set_even + i; ( পূর্ববর্তী জোড় অবস্থান যোগফল + বর্তমান অঙ্ক i)।
  • সেট গণনা +=চেক (স্থান + 1, সেট_ইভেন, সেট_বিজোড়, সেট_টেম্প, ভেক); এবং ফিরে আসুন arr[place][eve][od][temp] =গণনা।
  • ফাংশন place_prime(int val) সংখ্যা val নেয় এবং LSB থেকে MSB পর্যন্ত এর ডিজিট ধারণ করে একটি ভেক্টর ভেক তৈরি করে।
  • -1 সহ সমগ্র অ্যারে অ্যারে [][][][] সেট করুন।
  • গণনা নিন =চেক (0, 0, 0, 0, vec) যা শেষে ফলাফলটি প্রদান করবে।
  • ফলাফল হিসাবে গণনা ফেরত দিন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
const int size = 18;
int arr[size][90][90][2];
//firt 100 prime Numbers
int arr_2[] = {
   2,
   3,
   5,
   7,
   11,
   13,
   17,
   19,
   23,
   29,
   31,
   37,
   43,
   47,
   53,
   59,
   61,
   67,
   71,
   73,
   79,
   83,
   89,
   97
};

int check(int place, int eve, int od, int temp, vector < int > vec) {
   int count;
   int temp_3;
   if (place == vec.size()) {
      if (vec.size() & 1) {
         swap(od, eve);
      }
      int temp_2 = eve - od;
      for (int i = 0; i < 24; i++) {
         if (temp_2 == arr_2[i]) {
            return 1;
         }
      }
      return 0;
   }
   if (arr[place][eve][od][temp] != -1) {
      int set = arr[place][eve][od][temp];
      return set;
   }
   if (temp) {
      temp_3 = 9;
   } else {
      temp_3 = vec[place];
   }
   for (int i = 0; i <= temp_3; i++) {
      int set_temp = temp;
      int set_even = eve;
      int set_odd = od;
      if (i < vec[place]) {
         set_temp = 1;
      }
      if (place & 1) {
         set_odd = set_odd + i;
      } else {
         set_even = set_even + i;
      }
      count += check(place + 1, set_even, set_odd, set_temp, vec);
   }
   return arr[place][eve][od][temp] = count;
}

int place_prime(int val) {
   vector < int > vec;

   while (val) {
      vec.push_back(val % 10);
      val = val / 10;
   }
   reverse(vec.begin(), vec.end());
   memset(arr, -1, sizeof(arr));
   int count = check(0, 0, 0, 0, vec);
   return count;
}
int main() {
   int start = 20, end = 80;
   int count = place_prime(end) - place_prime(start - 1);
   cout << "Count of Numbers in Range with difference between Sum of digits at even and odd positions as Prime are: " << count;
   return 0;
}

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে

আউটপুট

Count of Numbers in Range with difference between Sum of digits at even and odd positions as Prime are: 15

  1. C++ এ একটি পূর্ণসংখ্যাতে জোড় এবং বিজোড় সংখ্যা গণনা করুন

  2. C++ এ একটি অ্যারেতে জোড় এবং বিজোড় উপাদানের সংখ্যা গণনা করুন

  3. C++ এ যোগফল S সহ মৌলিক P এর পরে মৌলিক সংখ্যা

  4. C++ এ জোড় এবং বিজোড় সংখ্যার যোগফল 1 এর মধ্যে পরম পার্থক্য সহ সমস্ত n-সংখ্যা সংখ্যা মুদ্রণ করুন