Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Алгоритм Горнера (https://forum.antichat.xyz/showthread.php?t=162156)

cheater_man 09.12.2009 14:09

Алгоритм Горнера
 
Выкладываю исходники возведения в степень по Горнера, 2 подхода(может кому пригодится, и в инете алгоритма почти нигде нет, пришлось рыться в книгах) :) .
1
Код:


 y = 1;
                r = (a * a) % m;
                for (int i = 0; i <= stepen.Length-1; i++)
                {
                    if (i >= stepen.Length-1)
                    {
                        if (ch[i] == '1')
                            y = (y * a) % m;
                    }
                    else
                    {
                        if (ch[i] == '1')
                            y = ((y * y) * r) % m;
                        else { y = (y * y) % m; }
                    }

2
Код:

r = a;
                if (x % 2 == 0)//четное
                    y = 1;
                else//нечетное
                    y = a;
                label16.Text = label16.Text + y.ToString() + ". ";
                for (int i = stepen.Length - 2; i >= 0; i--)
                {
                    r = (r * r) % m;
                        if (ch[i] == '1')
                            y = (y * r) % m;
                }

Если нужны исходники на С# пишите :)

Forcer 09.12.2009 15:49

Этот алгоритм принято называть схемой Горнера и гугл отлично знает про неё:
http://i48.tinypic.com/a23ts0.jpg

Но, думаю, лишним не будет - лишь бы правильно было реализовано.

cheater_man 11.12.2009 13:26

Схема то схемой, но алгоритма к этой схема(подробного нигде нет) :)

Gar|k 11.12.2009 15:33

ты хоть сделай функцию а то я смотрю уставший на этот код и не понимаю где тут на что возводится.


Время: 14:41