मैं पाइथन में एक अंश को निरंतर अंश में कैसे परिवर्तित करूं? मैंने चारों ओर देखने की कोशिश की और पाया कि लोग मेरी समस्या के समान काम करने के लिए फ्रैक्शन मॉड्यूल का उपयोग कर रहे हैं, लेकिन मैंने उन्हें संशोधित करने का प्रबंधन नहीं किया। मुझे मिली एक छवि के साथ एक उदाहरण:

example

इसलिए यदि इनपुट 181 101 है, तो आउटपुट 1 1 3 1 4 4 होना चाहिए। आगे धन्यवाद!

-3
Marked as Duplicate 4 जिंदा 2018, 14:46
5
तुमने क्या प्रयास किया?
 – 
Netwave
4 जिंदा 2018, 14:46
 – 
Saiful Azad
4 जिंदा 2018, 14:53

2 जवाब

सबसे बढ़िया उत्तर

ठीक है, चलो कुछ गणित से शुरू करते हैं। इसके पीछे तर्क सरल है। भिन्न n/d के लिए, यूक्लिडियन विभाजन n = d * q + r है जिसमें r < d है

हमारे पास बस n/d = (d * q + r) / d = q + r/d r

अब हम आपका निरंतर अंश प्राप्त करने के लिए 1/(r/d) = d/r के साथ पुनरावृति करते हैं

यह q के एक पूर्ण अनुक्रम की ओर ले जाएगा, क्योंकि भिन्नों के अनुक्रम का हर एक सख्ती से घटते पूर्णांक अनुक्रम का गठन करता है जो अधिकतम d संचालन में 0 तक पहुंच जाएगा।

एक संभावित पायथन कार्यान्वयन हो सकता है:

def cf(n, d):
    """Return the terms of the continued fraction when n is the numerator
and d the divisor as a list"""
    if d == 0: return []         # Ok it is finished
    q = n//d                     # compute the integer quotient
    r = n - q*d                  # the rest
    return [q] + cf(d, r)        # and recurse...

हमें उम्मीद के मुताबिक मिलता है:

>>> cf(181, 101)
[1, 1, 3, 1, 4, 4]
3
Serge Ballesta 4 जिंदा 2018, 16:00
क्या कोई बाधा डालने का कोई तरीका है जिसके माध्यम से हम कह सकते हैं कि निरंतर अंश की लंबाई कम से कम> k होनी चाहिए?
 – 
khan
5 अगस्त 2018, 09:53

सर्ज के उत्तर के समान, हम एक पुनरावृत्त संस्करण (पायथन 3) लिख सकते हैं:

def cf(n, d):
    res = []
    q, r = divmod(n, d)
    while r != 0:
        res = res + [q]
        prev_r = r
        q, r = divmod(d, r)
        d = prev_r
    return res + [q]
1
medifle 13 फरवरी 2021, 22:34