किसी धनात्मक पूर्णांक n के सभी भाजकों की संख्या खोजने का एक सहज (लेकिन धीमा) तरीका यह है कि 1 से लेकर n तक प्रत्येक संख्या द्वारा n का विभाजन जाँचें और जो-जो संख्याएँ विभाजित करती हैं, उन्हें गिनें।
लेकिन यह तरीका बेहद धीमा साबित हो सकता है। इसके बजाय, हम n के मुख्य गुणनखंडों (prime factors) की मदद से उसके सभी भाजकों की संख्या कहीं तेज़ी से निकाल सकते हैं (मुख्य गुणनखंड निकालने में लगभग O(√n) समय लगता है)।
मान लीजिए किसी संख्या को उसके मुख्य गुणनखंडों के तौर पर व्यक्त किया गया है:
n के सभी भाजकों की संख्या पता लगाने के लिए, हम प्रत्येक मुख्य गुणनखंड का घात (exponent) लें, उसमें 1 जोड़ें और फिर उन सभी को परस्पर गुणा कर दें:
इसे उसी तरह अमल में लाया जा सकता है जिस तरह हम n के सभी मुख्य गुणनखंड खोजते हैं:
n = ...
p, divisors = 1, 1 # प्रमुख गुणनखंड (prime factor) और कुल भाजकों की संख्या
while p * p <= n: # जब तक p <= sqrt(n)
p += 1 # प्रत्येक चक्र में प्रमुख गुणनखंड को 1 बढ़ाएँ
if n % p != 0: # अगर n, p से विभाज्य नहीं है तो कुछ न करें
continue
exp = 0 # घात (exponent) के लिए काउंटर
while n % p == 0: # जितनी बार संभव हो, विभाजित करें
n //= p
exp += 1
divisors *= exp + 1 # घात+1 को गुणा करके आगे बढ़ाएँ
if n > 1: # अगर p > sqrt(n), तो n खुद एक प्रमुख गुणनखंड है
divisors *= 2 # n को घात 1 के साथ जोड़ें
print(divisors)
चुनौती: n के भाजकों की संख्या खोजें
आपको एक पूर्णांक n दिया गया है। आपको n के सभी भाजकों की संख्या निकालनी है।
इनपुट
इनपुट की पहली पंक्ति में एक ही पूर्णांक n (2 ≤ n ≤ ) दिया होगा।
आउटपुट
कार्यक्रम को n के सभी भाजकों की संख्या प्रिंट करनी चाहिए।
उदाहरण
इनपुट
आउटपुट
8
4
17
2
2048
12
48
10
<strong>बोनस</strong>: ऐसा क्यों है कि सभी घातों में 1 जोड़कर उनका गुणनफल लेने से <code>n</code> के कुल भाजकों की संख्या मिलती है?
इस सूत्र का मूल विचार यह है कि n के किसी भी भाजक को n के मुख्य गुणनखंडों के संयोजनों के रूप में लिखा जा सकता है। प्रत्येक प्रमुख गुणनखंड का घात यह बताता है कि वह गुणनखंड कितनी बार उपयोग किया जा सकता है। जब हम प्रत्येक घात में 1 जोड़ते हैं, तो इसका मतलब है कि हम उस प्रमुख गुणनखंड को 0 बार से लेकर उतनी ही बार (घात तक) प्रयोग में लाने की संभावनाओं को शामिल कर रहे हैं। अंत में, इन सब (घात+1) मानों के गुणनफल से सभी संभव संयोजनों की संख्या मिलती है, जो n के कुल भाजक होते हैं।