কম্পিউটার

C++ এ মিডির উপপাদ্য


আমাদেরকে a_num হিসাবে পূর্ণসংখ্যার মান দেওয়া হয়েছে যা লব সংরক্ষণ করবে এবং p_den যা হর সংরক্ষণ করবে যা একটি মৌলিক সংখ্যা হওয়া উচিত। কাজ হল p_den দিয়ে ভাগ করার পর a_num-এ সম্পাদিত ক্রিয়াকলাপগুলি মিডির উপপাদ্য প্রমাণ করে কিনা তা পরীক্ষা করা৷

মিডির উপপাদ্য প্রমাণ করার ধাপগুলি হল-

  • a_num হিসাবে লব এবং p_den হিসাবে হর ইনপুট করুন যা সর্বদা একটি প্রধান মান হওয়া উচিত।

  • সংখ্যাগুলি ভাগ করুন। পুনরাবৃত্তি করা দশমিক মান পরীক্ষা করুন৷

  • দশমিক মানগুলিকে সঞ্চয় করুন যতক্ষণ না তারা পুনরাবৃত্তি না হয়।

  • সংখ্যাগুলি সমান কিনা তা পরীক্ষা করুন, যদি হ্যাঁ, তাহলে সেগুলিকে অর্ধেক ভাগ করুন

  • উভয় সংখ্যা যোগ করুন. আউটপুট যদি 9 এর একটি স্ট্রিং হয় তবে এটি মিডির উপপাদ্য প্রমাণ করে।

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

− int a_num =1 এবং int p_den =19

আউট − পুনরাবৃত্ত দশমিকগুলি হল:052631578947368421 প্রমাণিত মিডির উপপাদ্য

ব্যাখ্যা − মিডির উপপাদ্য যেমন

পরীক্ষা করতে উপরে উল্লিখিত পদক্ষেপগুলি অনুসরণ করুন
  • ভাগ করুন 1 / 19 =052631578947368421

  • পুনরাবৃত্তি করা দশমিক মান হল-:052631578947368421।

  • অঙ্কগুলিকে অর্ধেক ভাগ করুন যেমন 052631578 947368421৷

  • উভয় অর্ধেক যোগ করুন যেমন 052631578 + 947368421 =999,999,999৷

  • আমরা দেখতে পাচ্ছি, 999,999,999 হল 9 এর স্ট্রিং যা মিডির উপপাদ্য প্রমাণ করে।

−int a_num =49, int p_den =7

আউট − কোন পুনরাবৃত্ত দশমিক নয়

ব্যাখ্যা − যেমন আমরা দেখতে পাচ্ছি 49/7 কোন দশমিক মান তৈরি করে না যেহেতু 49 7 দ্বারা সম্পূর্ণভাবে বিভাজ্য। সুতরাং, আউটপুটটি পুনরাবৃত্তিমূলক দশমিক নয়।

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

  • int a_num এবং int p_den হিসাবে পূর্ণসংখ্যার মানগুলিতে ইনপুট করুন।

  • মিডির উপপাদ্য প্রমাণ করার জন্য ফাংশনটিকে মিডিস_থিওরেম(a_num, p_den) হিসাবে কল করুন।

  • ফাংশনের ভিতরে check_Midys()

    • int প্রথম থেকে 0 এবং int-এর শেষ 0

      হিসাবে ভেরিয়েবল তৈরি করুন
    • পরীক্ষা করুন যদি ফাংশন চেক(ভাল) মিথ্যা প্রদান করে তাহলে মিডির উপপাদ্য প্রযোজ্য নয় প্রিন্ট করুন।

    • অন্যথায় যদি len % 2 =0 হয় তাহলে i থেকে 0 পর্যন্ত FOR লুপ শুরু করুন যতক্ষণ না i len/2 থেকে কম হয় এবং প্রথমে সেট করুন * 10 + (str[i] - '0') এবং শেষ থেকে শেষ * 10 + (str[ len / 2 + i] - '0') এবং প্রিন্ট মিডির উপপাদ্য প্রমাণ করেছে।

  • অন্যথায়, প্রিন্ট মিডির উপপাদ্য প্রযোজ্য নয়।

  • ফাংশনের ভিতরে Midys_theorem(int a_num, int p_den)

    • পূর্ণসংখ্যার মানগুলিকে map_val হিসাবে ম্যাপ করতে একটি মানচিত্র প্রকারের পরিবর্তনশীল তৈরি করুন এবং মানচিত্রটি পরিষ্কার করুন৷

    • অনুস্মারক a_num % p_den হিসাবে সেট করুন।

    • রিমাইন্ডার 0 এর সমান না হওয়া পর্যন্ত শুরু করুন এবং map_val.find(reminder) map_val.end() এর সমান তারপর map_val[reminder] কে result.length(), রিমাইন্ডার * 10 এ রিমাইন্ডার, টেম্প টু রিমাইন্ডার / p_den, ফলাফল + ফলাফল করুন to_string(temp) এবং অনুস্মারক % p_den.

    • IF অবশিষ্ট =0 চেক করুন তারপরে -1 ELSE, সেট গণনা toresult.substr(map_val[reminder])

    • রিটার্ন গণনা

  • ফাংশনের ভিতরে বুল চেক(int val)

    • i থেকে 2 থেকে i val/2 থেকে কম না হওয়া পর্যন্ত FOR লুপ শুরু করুন। IF val % i =0 চেক করুন তারপর FALSE দিন অন্যথায় TRUE দিন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
bool check(int val){
   for(int i = 2; i <= val / 2; i++){
      if(val % i == 0){
         return false;
      }
   }
   return true;
}
void check_Midys(string str, int val){
   int len = str.length();
   int first = 0;
   int last = 0;

   if(!check(val)){
      cout<<"\nNot applicable for Midy's theorem";
   }
   else if(len % 2 == 0){
      for(int i = 0; i < len / 2; i++){
         first = first * 10 + (str[i] - '0');
         last = last * 10 + (str[len / 2 + i] - '0');
      }
      cout<<"\nProved Midy's theorem";
   }
   else{
      cout<<"\nNot applicable for Midy's theorem";
   }
}
string Midys_theorem(int a_num, int p_den){
   string result;
   map<int, int> map_val;
   map_val.clear();

   int reminder = a_num % p_den;

   while((reminder != 0) && (map_val.find(reminder) == map_val.end())){
      map_val[reminder] = result.length();
      reminder = reminder * 10;
      int temp = reminder / p_den;
      result += to_string(temp);
      reminder = reminder % p_den;
   }
   if(reminder == 0){
      return "-1";
   }
   else{
      string count = result.substr(map_val[reminder]);
      return count;
   }
}
int main(){
   int a_num = 1;
   int p_den = 19;
   string result = Midys_theorem(a_num, p_den);
   if(result == "-1"){
      cout<<"No Repeating Decimal";
   }
   else{
      cout<<"Repeating decimals are: "<<result;
      check_Midys(result, p_den);
   }
   return 0;
}

আউটপুট

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

Repeating decimals are: 052631578947368421
Proved Midy's theorem

  1. C++ এ রেখার প্রতিফলন

  2. C++ এ ডায়াগোনাল ট্রাভার্স II

  3. ফার্ম্যাটের ছোট্ট উপপাদ্য বাস্তবায়নের জন্য C++ প্রোগ্রাম

  4. অয়লার উপপাদ্য বাস্তবায়নের জন্য C++ প্রোগ্রাম