परिमेय संख्याएं - एक संख्या जिसे p/q के रूप में व्यक्त किया जाता है। इस शर्त को देखते हुए कि p और q दोनों पूर्णांक होने चाहिए और q 0 के बराबर नहीं होना चाहिए।
सकारात्मक परिमेय संख्याएं वे संख्याएँ हैं जिनका अंतिम मान धनात्मक है। इसके लिए या तो p और q दोनों धनात्मक हों या p और q दोनों ऋणात्मक हों।
इस समस्या में किसी दिए गए नंबर तक सकारात्मक यादृच्छिक संख्या उत्पन्न करने के लिए। हमें n के लिए एक सीमित संख्या में धनात्मक परिमेय संख्याएँ उत्पन्न करनी हैं अर्थात् हम 1 से n के बीच परिमेय संख्याएँ प्राप्त करेंगे। इस एल्गोरिथम के लिए, हम यादृच्छिक संख्याएँ उत्पन्न करेंगे जहाँ 1 <=p <=n और 1 <=q <=n.
आइए अवधारणा को बेहतर ढंग से विस्तृत करने के लिए एक उदाहरण लेते हैं -
इनपुट :3आउटपुट :1, ½ , ⅓ , 2 , ⅔ , 3/2 , 3 ।
स्पष्टीकरण - इस उदाहरण में, हम p और q दोनों के लिए 1 से 3 के बीच के मानों पर विचार करेंगे।
इसके लिए डिज़ाइन किया गया एल्गोरिदम उन सेटों का उपयोग करके काम करेगा जो आवश्यक संयोजनों को बेहतर ढंग से उत्पन्न करने के लिए सर्वोत्तम डेटा संरचनाएं हैं। चूंकि सेट को मैप किया जा सकता है और मैपिंग क्रम n से n तक हो सकता है यानी सेट 1 में प्रत्येक मान को सेट 2 में मानों के साथ ठीक से मैप किया जा सकता है जिससे मैपिंग बनायी जा सके जो आवश्यक जोड़े उत्पन्न कर सके। आवश्यक जोड़े बनाने के लिए हम सकारात्मक मूल्यों के सेट का उपयोग करेंगे और समाधान प्राप्त करने के लिए मूल्यों को मैप करेंगे।
आइए एक उदाहरण लेते हैं,
(1,1) , (1,2) , (1,3)(2,1) , (2,2) , (2,3)(3,1) , (3,2) , ( 3,3)
आइए इन मानों को एक उल्टे एल आकार ट्रैवर्सल विधि में फिर से व्यवस्थित करें -
(1,1)(1,2) , (2,2) , (2,1)(1,3) , (2,3) , (3,3) , (3,2) , ( 3,1)
ये वे मान हैं जिनका उपयोग हमने सकारात्मक तर्कसंगत एल्गोरिथम उदाहरण उत्पन्न करने में किया है। बेहतर ढंग से समझने के लिए कि हमने ठीक वही मान प्राप्त किए हैं, बस इन मानों को प्राप्त करने के लिए ∕ के साथ प्रतिस्थापित करें -
1/11/2 , 2/2 , 2/11/3 , 2/3 , 3/3 , 3/2 , 3/1
हालांकि 1∕1, 2∕2, 3∕3 जैसे मान हैं जो समान मान की ओर इशारा करते हैं। हम सबसे बड़े सामान्य भाजक का उपयोग करके इन मानों को समाप्त कर देंगे।
उदाहरण
आयात करें निजी अंतर भाजक; सार्वजनिक सकारात्मक तर्कसंगत संख्या (इंट अंश, इंट हर) {यह। अंश =अंश; यह। हर =हर; } @ ओवरराइड पब्लिक स्ट्रिंग टूस्ट्रिंग () { अगर (denominator ==1) {रिटर्न Integer.toString(numerator); } और {रिटर्न Integer.toString(numerator) + '/' + Integer.toString(denominator); } }} निजी स्थिर int gcd(int num1, int num2){ int n1 =num1; इंट n2 =num2; जबकि (n1!=n2) { अगर (n1> n2) n1 -=n2; अन्य n2 - =n1; } वापसी n1; } निजी स्थैतिक सूचीआउटपुट
1, 1/2, 2, 1/3, 2/3, 3/2, 3, 1/4, 3/4, 4/3, 4, 1/5, 2/5, 3/5 , 4/5, 5/4, 5/3, 5/2, 5