नोटिस करने वाली पहली बात यह है कि यह सभी प्रमुख कारकों को खोजने के लिए पर्याप्त है। एक बार आपके पास इन्हें कुल divisors की संख्या को ढूंढना आसान हो जाता है: प्रत्येक प्राइम के लिए, 1 बार दिखाई देने वाली संख्या में जोड़ें और इन्हें एक साथ गुणा करें। तो 12 = 2 * 2 * 3 के लिए आपके पास (2 + 1) * (1 + 1) = 3 * 2 = 6 कारक हैं।
अगली चीज़ पहले से निम्न होती है: जब आपको कोई कारक मिल जाता है, तो इसे विभाजित करें ताकि परिणामी संख्या छोटी हो। जब आप इसे इस तथ्य से जोड़ते हैं कि आपको केवल वर्तमान संख्या के वर्ग रूट की जांच करने की आवश्यकता है, यह एक बड़ा सुधार है। उदाहरण के लिए, एन = 10714293844487412 पर विचार करें। नैतिक रूप से यह एन कदम उठाएगा। इसकी वर्ग रूट तक जांचने से एसकर्ट (एन) या लगभग 100 मिलियन कदम उठते हैं। लेकिन चूंकि कारक 2, 2, 3, और 953 की खोज शुरुआती है, वास्तव में आपको केवल एक मिलियन की जांच करने की आवश्यकता है - 100x सुधार!
एक और सुधार: आपको यह देखने के लिए हर नंबर की जांच करने की आवश्यकता नहीं है कि यह आपके नंबर को विभाजित करता है, केवल प्राइम्स। यदि यह अधिक सुविधाजनक है तो आप 2 और विषम संख्याओं, या 2, 3, और संख्या 6 एन -1 और 6 एन + 1 (एक मूल पहिया चलनी) का उपयोग कर सकते हैं।
यहां एक और अच्छा सुधार है। यदि आप जल्दी से निर्धारित कर सकते हैं कि कोई संख्या प्रमुख है, तो आप विभाजन की आवश्यकता को और भी कम कर सकते हैं। मान लीजिए, छोटे कारकों को हटाने के बाद, आपके पास 120528291333090808192969 है। यहां तक कि इसके वर्ग रूट तक की जांच करने में काफी समय लगेगा - 300 अरब कदम। लेकिन एक मिलर-राबिन परीक्षण (बहुत तेज - शायद 10 से 20 नैनोसेकंड) दिखाएगा कि यह संख्या समग्र है। यह कैसे मदद करता है? इसका मतलब यह है कि यदि आप इसकी घन रूट की जांच करते हैं और कोई कारक नहीं पाते हैं, तो वास्तव में दो प्राइम शेष हैं। यदि संख्या एक वर्ग है, तो इसके कारक प्रमुख हैं; यदि संख्या वर्ग नहीं है, तो संख्याएं अलग-अलग प्राइम हैं। इसका मतलब यह है कि आप अंतिम जवाब प्राप्त करने के लिए क्रमशः 3 या 4 तक अपने 'रनिंग कुल' को गुणा कर सकते हैं - यहां तक कि कारकों को जानने के बिना भी! इससे अनुमान लगाए जाने से अधिक अंतर हो सकता है: 300 अरब से केवल 50 मिलियन तक की जरूरतों की संख्या, 6000 गुना सुधार!
उपरोक्त के साथ एकमात्र परेशानी यह है कि मिलर-राबिन केवल साबित कर सकता है कि संख्याएं समग्र हैं; अगर इसे एक प्रधान दिया जाता है तो यह साबित नहीं कर सकता कि संख्या प्रमुख है। उस स्थिति में आप संख्या के वर्ग रूट पर फैक्टरिंग के प्रयास को छोड़ने के लिए एक प्राथमिकता-सिद्ध कार्य लिखना चाह सकते हैं। (वैकल्पिक रूप से, आप कुछ और मिलर-राबिन परीक्षण कर सकते हैं, अगर आप उच्च आत्मविश्वास से संतुष्ट होंगे कि आपका उत्तर एक सबूत के बजाय सही है। यदि कोई संख्या 15 परीक्षण पास करती है तो यह 1 से कम संभावना के साथ समग्र है । एक अरब में)
एक बेहतर विधि नाम 'GetFactorCount' होगा। – SLaks
http://stackoverflow.com/questions/110344/algorithm-to-calculate-the-number-of-divisors-of-a-given-number – empi