दो स्ट्रिंग्स numo और demo इनपुट के रूप में दी गई हैं। लक्ष्य दोनों स्ट्रिंग्स के सामान्य भाजक की संख्या ढूंढना है। एक स्ट्रिंग के भाजक निम्न तकनीक का उपयोग करके पाए जाते हैं: यदि स्ट्रिंग str का sub1 भाजक है तो हम sub1 को किसी भी संख्या में बार दोहराकर str बना सकते हैं जब तक str उत्पन्न न हो जाए। उदाहरण: str=abcabcabc sub1=abc
उदाहरण के लिए
इनपुट
numo = "abababab" demo = "abababababababab"
आउटपुट
Count of number of common divisors of the given strings are: 2
व्याख्या
स्ट्रिंग्स को निम्न भाजक सबस्ट्रिंग्स का उपयोग करके उत्पन्न किया जा सकता है: "ab", "abab"
इनपुट
numo = "pqqppqqp" demo = "pqpq"
आउटपुट
Count of number of common divisors of the given strings are: 0
व्याख्या
स्ट्रिंग्स का कोई सामान्य भाजक नहीं है। दोनों के केवल भाजक हैं: "pqqp" numo के लिए और "pq" demo के लिए।
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण इस प्रकार है:
किसी स्ट्रिंग sub1 के str का भाजक होने के लिए, यह str का उपसर्ग होना चाहिए और इसकी लंबाई str की लंबाई को पूरी तरह विभाजित करनी चाहिए। sub1 की इस शर्त को दोनों स्ट्रिंग्स numo और demo के साथ जांचें और तदनुसार गिनती बढ़ाएं।
स्ट्रिंग्स numo और demo को इनपुट के रूप में लें।
फ़ंक्शन verify(string str, int val) स्ट्रिंग str लेता है और 1 लौटाता है यदि 0 से val के बीच का सबस्ट्रिंग दोहराकर str उत्पन्न कर सकता है।
फ़ंक्शन 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 और demo का भाजक है।
यदि दोनों 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