मेरे पास कई तर्कसंगत संख्याओं का संग्रह है, जिसमें प्रत्येक के बड़े और सैकड़ों (सैकड़ों या हजारों बिट्स) के रूप में संग्रहीत प्रत्येक के अंक और संश्लेषक हैं। मैं कुशलतापूर्वक परीक्षण करने में सक्षम होना चाहता हूं कि सेट में दिए गए तर्कसंगत संख्या a/b
सेट में किसी अन्य तर्कसंगत संख्या c/d
के बराबर है या नहीं।कुशलता से पता चलता है कि तर्कसंगत संख्या बराबर
सबसे सरल तरीका यह जांचना होगा कि a*d == b*c
, निश्चित रूप से, लेकिन मुझे पूर्ण उत्पादों की गणना करने से कुछ और अधिक कुशल चाहिए।
मेरी विशेष यूज-केस पर कुछ नोट:
- जोड़े मैं परीक्षण हो जाएगा वास्तव में बराबर होने के (क्योंकि मैं पहले से ही precomputing रहा हूँ और पहली बार अपने चल बिन्दु अनुमानों से उनकी तुलना की पूरी संभावना है), अगर वे असमान हैं तो जल्दी से बाहर निकलना मुझे ज्यादा समय नहीं बचाएगा।
- मैं प्रत्येक संख्या के लिए अतिरिक्त डेटा प्रीकंप्यूटिंग के साथ ठीक हूं, लेकिन प्रत्येक नंबर का उपयोग केवल कुछ हद तक तुलना में किया जाएगा, इसलिए महंगा प्रीकंप्यूशन (जैसे प्राइम फैक्टरेशन) शायद सार्थक नहीं होगा।
- कभी-कभी झूठे नकारात्मक ठीक होंगे, लेकिन झूठी सकारात्मक नहीं हैं।
मैं इस सैद्धांतिक रूप से असंभव हो सकता है लगता है, लेकिन छत्ता मन में इसे बाहर फेंक सिर्फ मामले में।
आम दृष्टिकोण के रूप में (एक/gcd (ए, बी))/a/b को सामान्य बनाने में है (ख/gcd (ए, बी))। यह आपके लिए क्यों काम नहीं करता है? – deniss
@deniss क्योंकि दो बड़ी संख्याओं की जीसीडी की गणना करना काफी महंगी ऑपरेशन है। – Sneftel
आपका डेटा आकार और गति आवश्यकताओं क्या है? जीएमपी में [कुछ अच्छे अनुकूलित एल्गोरिदम] हैं (https://gmplib.org/manual/Subquadratic-GCD.html#Subquadratic-GCD) जीसीडी – deniss