मान लीजिए कि हमारे पास एक संख्या 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