मान लीजिए कि हमारे पास एक संख्या n है, तो हमें इस संभावना का पता लगाना होगा कि n का कोई भी उचित भाजक एक सम पूर्ण वर्ग होगा।
इसलिए, यदि इनपुट n =36 जैसा है, तो आउटपुट 1/8 होगा क्योंकि 36 के आठ उचित भाजक हैं, ये {1,2,3,4,6,9,12,18} हैं और उनमें से केवल एक संख्या (4) पूर्ण वर्ग और सम है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- यदि n mod 4 0 के समान नहीं है, तो
- वापसी 0
- अन्यथा,
- एनसी:=एन, पीटीआर:=2
- l :=एक नई सूची
- जबकि ptr <=nc का वर्गमूल, करें
- a :=0
- जबकि एनसी मॉड पीटीआर 0 के समान है, करें
- a :=a + 1
- एनसी :=(एनसी / पीटीआर) की मंजिल
- अगर एक> 0, तो
- सूची में a जोड़ें
- ptr:=ptr + 1
- अगर एनसी> 1, तो सूची में 1 जोड़ें
- k :=l[0]
- d :=k + 1
- नहीं :=(k / 2) की मंजिल
- एल में प्रत्येक के लिए [सूचकांक 1 से अंत तक], करते हैं
- d :=d *(i + 1)
- नहीं :=नहीं * मंजिल (i / 2) + 1
- d :=d - 1
- यदि n एक पूर्ण वर्ग है, तो
- नहीं :=नहीं - 1
- g :=d का gcd और नहीं
- d :=d / g का तल
- नहीं :=संख्या / g का तल
- यदि नहीं 0 के समान है, तो
- वापसी 0
- अन्यथा,
- एक भिन्न संख्या/डी लौटाएं
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from math import gcd def solve(n): if n % 4 != 0: return 0 else: nc = n ptr = 2 l = [] while ptr <= nc ** 0.5: a = 0 while nc % ptr == 0: a += 1 nc = nc / ptr if a > 0: l += [a] ptr += 1 if nc > 1: l += [1] k = l[0] d = k + 1 no = int(k / 2) for i in l[1:]: d = d * (i + 1) no *= int(i / 2) + 1 d = d - 1 if int(n ** 0.5) ** 2 == n: no -= 1 g = gcd(d, no) d = d // g no = no // g if no == 0: return 0 else: return str(no) + '/' + str(d) n = 36 print(solve(n))
इनपुट
4, 27
आउटपुट
1/8