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;
}
Если нужны исходники на С# пишите :)
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;
}
Если нужны исходники на С# пишите :)