কম্পিউটার

C++ এ প্রদত্ত স্ট্রিংগুলির সাধারণ ভাজকের সংখ্যা গণনা করুন


ইনপুট হিসাবে দুটি স্ট্রিং numo এবং ডেমো দেওয়া হয়েছে। লক্ষ্য হল উভয় স্ট্রিং এর সাধারণ ভাজকের সংখ্যা বের করা। একটি স্ট্রিং এর ভাজক নিম্নলিখিত কৌশল ব্যবহার করে পাওয়া যায়:যদি স্ট্রিং str এর ভাজক হিসাবে sub1 থাকে তবে str তৈরি না হওয়া পর্যন্ত আমরা এটিকে যেকোন সংখ্যক বার পুনরাবৃত্তি করে sub1 ব্যবহার করে str তৈরি করতে পারি। উদাহরণ:str=abcabcabc sub1=abc

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

ইনপুট

numo = "abababab" demo = "abababababababab"

আউটপুট

Count of number of common divisors of the given strings are: 2

ব্যাখ্যা

The strings can be generated using following divisor substrings :
“ab”, “abab”

ইনপুট

numo = "pqqppqqp" demo = "pqpq"

আউটপুট

Count of number of common divisors of the given strings are: 0

ব্যাখ্যা

The strings do not have any common divisor. Only divisors of both are:
“pqqp” for numo and “pq” for demo.

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

যেকোনো স্ট্রিং সাব1 str এর ভাজক হওয়ার জন্য, এটি অবশ্যই str এর একটি উপসর্গ হতে হবে এবং এর দৈর্ঘ্য অবশ্যই str এর দৈর্ঘ্যকে সম্পূর্ণভাবে ভাগ করতে হবে। স্ট্রিং নুমো এবং ডেমো উভয়ের সাথে সাব1-এর এই শর্তটি পরীক্ষা করুন এবং সেই অনুযায়ী বৃদ্ধির সংখ্যা।

  • ইনপুট হিসাবে স্ট্রিং numo এবং ডেমো নিন।

  • ফাংশন ভেরিফাই(স্ট্রিং স্ট্র, int ভ্যাল) স্ট্রিং স্ট্র নেয় এবং 1 রিটার্ন করে যদি স্ট্র তৈরি করতে 0 থেকে ভ্যালের মধ্যে সাবস্ট্রিং পুনরাবৃত্তি করা যায়।

  • ফাংশন common_divisor(string numo, string demo) উভয় স্ট্রিং নেয় এবং প্রদত্ত স্ট্রিংগুলির সাধারণ ভাজকের সংখ্যার একটি গণনা ফেরত দেয়।

  • 0 হিসাবে প্রাথমিক গণনা নিন।

  • ইনপুট স্ট্রিংগুলির দৈর্ঘ্য গণনা করুন। এবং সর্বনিম্ন দৈর্ঘ্য min_val এ সংরক্ষণ করুন।

  • সূচক i=0 থেকে min_val.

    এর জন্য লুপ ব্যবহার করে ট্রাভার্স করুন
  • যদি সাবস্ট্রিং এর বর্তমান দৈর্ঘ্য i উভয় স্ট্রিং numo_size এবং demo_size এর দৈর্ঘ্যকে ভাগ করে এবং উপসর্গগুলিও numo.substr(0, i) ==demo.substr(0, i) মেলে।

  • তারপর verify()

    ব্যবহার করে 0 থেকে i সাবস্ট্রিং numo এবং ডেমো উভয়েরই ভাজক কিনা তা খুঁজুন
  • যদি verify(numo,i) এবং verify(demo,i) উভয়ই 1 রিটার্ন করে তাহলে ইনক্রিমেন্ট কাউন্ট।

  • লুপ রিটার্নের শেষে ফলাফল হিসাবে গণনা করা হয়।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int verify(string str, int val){
   int length = str.length();
   for (int i = 0; i < length; i++){
      if(str[i] != str[i % val]){
         return 0;
      }
   }
   return 1;
}
int common_divisor(string numo, string demo){
   int count = 0;
   int numo_size = numo.size();
   int demo_size = demo.size();
   int min_val = min(numo_size, demo_size);
   for(int i = 1; i <= min_val; i++){
      if(numo_size % i == 0){
         if(demo_size % i == 0){
            if(numo.substr(0, i) == demo.substr(0, i)){
               if(verify(numo, i)==1){
                  if(verify(demo, i)==1){
                     count++;
                  }
               }
            }
         }
      }
   }
   return count;
}
int main(){
   string numo = "abababab";
   string demo = "abababababababab";
   cout<<"Count the number of common divisors of the given strings are:
   "<<common_divisor(numo, demo);
   return 0;
}

আউটপুট

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

উৎপন্ন করবে
Count the number of common divisors of the given strings are: 3

  1. C++ এ প্রদত্ত আকারের আয়তক্ষেত্রের ভিতরে সম্ভাব্য রম্বির সংখ্যা গণনা করুন

  2. C++-এ দুটি স্ট্রিং-এ সাধারণ অনুক্রম গণনা করুন

  3. C++ এ দুটি স্ট্রিং-এ সাধারণ অক্ষর গণনা করুন

  4. C++ এ একটি সংখ্যার সমস্ত নিখুঁত ভাজক গণনা করুন