Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Х в N степени


Страницы:   1 2

Студент :((( ©   (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]

Преподаватель нам задание дал что ли?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо