python - पाइथन ने बिल्ट-इन फ़ंक्शन पाउ () को कैसे कार्यान्वित किया?



3 Answers

आप कंप्यूटिंग (x ** y) % z जल्दी से निम्नलिखित दो कार्यान्वयन पर विचार कर सकते हैं।

पायथन में:

def pow_mod(x, y, z):
    "Calculate (x ** y) % z efficiently."
    number = 1
    while y:
        if y & 1:
            number = number * x % z
        y >>= 1
        x = x * x % z
    return number

सी में:

#include <stdio.h>

unsigned long pow_mod(unsigned short x, unsigned long y, unsigned short z)
{
    unsigned long number = 1;
    while (y)
    {
        if (y & 1)
            number = number * x % z;
        y >>= 1;
        x = (unsigned long)x * x % z;
    }
    return number;
}

int main()
{
    printf("%d\n", pow_mod(63437, 3935969939, 20628));
    return 0;
}
python algorithm math

मुझे a**b % c गणना करने के लिए एक प्रोग्राम लिखना है जहां b और c दोनों बहुत बड़ी संख्या हैं। अगर मैं सिर्फ a**b % c उपयोग a**b % c हूं, तो यह वास्तव में धीमा है। तब मैंने पाया कि अंतर्निहित फ़ंक्शन pow() pow(a, b, c) को कॉल करके यह वास्तव में तेज़ कर सकता है।
मुझे यह जानकर उत्सुकता है कि पाइथन इसे कैसे कार्यान्वित करता है? या मुझे इस कोड को लागू करने वाली स्रोत कोड फ़ाइल कहां मिल सकती है?




मुझे अजगर के बारे में पता नहीं है, लेकिन अगर आपको तेज शक्तियों की आवश्यकता है, तो आप स्क्वायरिंग द्वारा एक्सपोनेंटिएशन का उपयोग कर सकते हैं:

http://en.wikipedia.org/wiki/Exponentiation_by_squaring

यह एक साधारण पुनरावर्ती विधि है जो घाटियों की कम्यूटेटिव संपत्ति का उपयोग करती है।




पायथन में पाउ (एक्स, एन) लागू करें

def myPow(x, n):
        p = 1
        if n<0:
            x = 1/x
            n = abs(n)

        # Exponentiation by Squaring

        while n:
            if n%2:
                p*= x
            x*=x
            n//=2
        return p

पायथन में पाउ (एक्स, एन, एम) लागू करें

def myPow(x,n,m):
            p = 1
            if n<0:
                x = 1/x
                n = abs(n)
            while n:
                if n%2:
                    p*= x%m
                x*=x%m
                n//=2
            return p

स्पष्टीकरण के लिए इस link को चेकआउट करें






Related