इस लेख में, हम N से विभाज्य रिपीटेड यूनिट्स की संख्या ढूंढने पर चर्चा करेंगे। रिपीटेड यूनिट्स केवल 1 के दोहराव वाले नंबर हैं, मान लीजिए R(k) वह रिपीटेड यूनिट है जहां k 1 की लंबाई है। जैसे R(4) = 1111। इसलिए हमें k का न्यूनतम मान ढूंढना है जिसके लिए R(k) N से विभाज्य है, उदाहरण के लिए −
Input : N = 13 Output : k = 6 Explanation : R(6) यानी 111113 13 से विभाज्य है। Input : N = 31 Output : k = 15
समाधान खोजने का दृष्टिकोण
आप इस समस्या को 1 से शुरू होने वाले k के प्रत्येक मान की जांच करके हल कर सकते हैं जहां R(k) N से विभाज्य है। लेकिन इस समाधान के साथ, हम यह नहीं ढूंढ पाएंगे कि N किसी R(k) मान से विभाज्य है या नहीं। यह प्रोग्राम को बहुत जटिल बना देगा और शायद काम भी न करे।
इस प्रोग्राम के समाधान के लिए एक कुशल दृष्टिकोण है,
- जांचें कि क्या N 10 के साथ कोप्राइम है।
- यदि नहीं, तो R(k) किसी भी k मान के लिए N से विभाज्य नहीं होगा।
- यदि हां, तो प्रत्येक रिपीटेड यूनिट R(1), R(2), R(3)... के लिए, R(i) और N के विभाजन का शेषफल गणना करें, तो n संख्या में शेषफल होंगे।
- R(i) और R(j) के लिए समान शेषफल मान ढूंढें, जहां R(i) और R(j) दो रिपीटेड यूनिट्स हैं ताकि R(i) - R(j) N से विभाज्य हो।
- R(i) और R(j) का अंतर 10 की किसी घात से गुणा किया गया रिपीटेड यूनिट होगा, लेकिन 10 और N अपेक्षाकृत प्राइम हैं, इसलिए R(k) N से विभाज्य होगा।
उदाहरण
#include <bits/stdc++.h> using namespace std; int main() { int N = 31; int k = 1; // जांचें कि क्या N 10 के साथ कोप्राइम है। if (N % 2 == 0 || N % 5 == 0){ k = 0; } else { int r = 1; int power = 1; // तब तक जांचें जब तक शेषफल N से विभाज्य न हो जाए। while (r % N != 0) { k++; power = power * 10 % N; r = (r + power) % N; } } cout << "Value for k : "<< k; return 0; } आउटपुट
Value for k : 15
निष्कर्ष
इस लेख में, हम दिए गए N से विभाज्य R(k) के लिए k का मान ढूंढने पर चर्चा करते हैं, जहां R(k) रिपीटेड यूनिट्स हैं। हमने k का मान ढूंढने का एक आशावादी तरीका चर्चा किया। हमने इस समस्या को हल करने के लिए C++ कोड पर भी चर्चा की। आप इस कोड को Java, C, Python आदि किसी भी अन्य भाषा में लिख सकते हैं। आशा है कि आपको यह लेख उपयोगी लगा होगा।