![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Х в N степени
Студент :((( © (2005-10-04 23:35:00)Здраствуйте!
Я уже задавал этот вопрос, но ... алгоритм который мне подсказали оказался не самым оптимальным
Мне необходимо реализовать программу в которую вводится 2 целых числа C и N
необходимо вычислить С в степени N используя минимальное число операций умножения
Если не совсем ясно высказался:
Если c=2 n=7
то лучшее это
c:=c*c;
c:=c*c;
c:=c*c;
c:=c/2;
(естесно не в таком виде, с if, for и т.д. я знаком)
Вот та ветка http://www.delphimaster.ru/cgi-bin/forum.pl?id=1127510917&n=0
Такой вариант решения
function IntPower(X: Cardinal; Y: Cardinal): Int64;
begin
Result := 1;
while Y > 0 do
begin
while not Odd(Y) do
begin
Y := Y div 2;
X := Round(X / (1/ X))
end;
Dec(Y);
Result := Round(Result / (1 / X));
end;
end;
преподаватель забраковал для n=15
оптимально сделать так
x:=xi*xi; 2я степень
x:=x*x; 4я
x:=x*xi; 5я
x:=x*x*x;15 я
Где xi исходное значение Х
Решение в пять операций умножения
Алгоритм написаный выше делает в 8
Так что вновь прошу вашего совета...
Помогите пожалуйста
Fenik (2005-10-04 23:52:00) [21]
> [3] Студент :((( (04.10.05 23:40)
Если филолог, то математику категорически запрещено знать?
Ущербно как-то :)
Anatoly Podgoretsky (2005-10-04 23:45:00) [22]У вас в институте должен быть коператив по написанию курсовых и других работ.
Студент :((( (2005-10-04 23:40:00) [23]Я извиняюсь, но я сам не разбираюсь в этом, да оно мне и не нужно, я студент ФИОЛОГИЧЕСКОГО факультета, а програмирование вообще непонятно зачем нам дали
Студент :((( (2005-10-04 23:39:00) [24]Сорри вот тот алгоритм который я использовал
function IntPower(X: Cardinal; Y: Cardinal): Int64;
begin
Result := 1;
while Y > 0 do
begin
while not Odd(Y) do
begin
Y := Y div 2;
X := Sqr(X);
end;
Dec(Y);
Result := Result * X;
end;
end;
Fenik (2005-10-04 23:38:00) [25]Преподаватель нам задание дал что ли?