Wyjaśnienie algorytmu potęgowania modularnego

0

Witam :). Pisałem ostatnio na informatykę program, w którego skład wchodził algorytm potęgowania modularnego. Niestety, algorytm (z pośpiechu) przepisałem z neta, sprawdziłem czy działa i skompilowałem - niestety dziś poproszony zostałem o wyjaśnienie tego algorytmu, czego ja za bardzo nie jestem w stanie zrobić, bo w ogóle w to nie wnikałem. Dlatego prosiłbym w wyjaśnienie :):

            int i;
            long result = 1;
            long x = a % c; 

            for (i = 1; i <= b; i <<= 1)
            {
                x %= c;

                if ((b & i) != 0)
                {
                    result *= x;
                    result %= c;
                }

                x *= x;
            } 

            return (int)result;
        }

Nie wnikałem w C# za bardzo w jedną kwestię, dlatego pytam: cóż to za operator <<=? Pozdrawiam ;).

0
i = i<<1
0

wykładnik liczbą dwójkową, potęga iloczynem tylko pewnych kolejnych kwadratów.
linijki "result *= x;" i "x *=x" tu uwaga bo może pojawić się nie jawne mod 2<sup>{32} albo 2</sup>{64}

1 użytkowników online, w tym zalogowanych: 0, gości: 1