Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2012, 19:05   #1
Mahoyn93
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 28
По умолчанию Быстрое возведение в степень.(ошибка)

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
int main(){
int p,a,s;
int y,t,x;
char buf[100];
cout<<"vvedite chislo:\n";
cin>>a;
cout<<"\nvvedite stepen:\n";
cin>>x;
cout<<"\nvedite p:";
cin>>p;
itoa(x,buf,2);
t=log2(x);
s=a;
y=1;
for(int i=0;i<=t;i++)
{
if(buf[i]==1) y=(y*s)%p;
s=(s*s)%p;}
cout<<"\n="<<y;
getch();
return y;

}


быстрое возведение в степень по формуле a^xmodp=y.помогите найти и исправить ошибку
Mahoyn93 вне форума Ответить с цитированием
Старый 15.04.2012, 20:05   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
return y;
Это Вы зря, ненулевое возвращаемое программой значение трактуется как ошибка.
И возведение в степень Вы слегка неуклюже реализовали.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 15.04.2012, 20:33   #3
Mahoyn93
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 28
По умолчанию

просто препод сказал тут одно исправить и заработает.а с 0 писать я просто не успею.
Mahoyn93 вне форума Ответить с цитированием
Старый 15.04.2012, 20:39   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

А в чем, собственно, ошибка? Неправильно степень считает?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 15.04.2012, 21:19   #5
Mahoyn93
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 28
По умолчанию

да неправильно считает.1 выдает.как мне распечатать массив buf функции itoa только не cout'ом.препод сказал добавить
Mahoyn93 вне форума Ответить с цитированием
Старый 15.04.2012, 21:39   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

itoa, как я понял, переводит число в указанную систему счисления, причем записывает он, я полагаю, слева направо. А Ваш алгоритм был бы корректен, если бы она записывала результат справа налево. Да и вообще весь алгоритм странный. Вот, в общем

Код:
s = 1;
y = a;
while (x) {
  if (x & 1) s = (s * y) % p;
  y = (y * y) % p;
  x >>= 1;
}
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 15.04.2012 в 21:42.
Granus вне форума Ответить с цитированием
Старый 15.04.2012, 21:58   #7
Mahoyn93
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 28
По умолчанию

спасибо большое. все работает
Mahoyn93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возведение в степень XYLIGANXYL Общие вопросы по Java, Java SE, Kotlin 7 17.09.2016 15:20
возведение в степень [CODER] Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 14.04.2014 10:18
Возведение в степень Dima-War Общие вопросы C/C++ 7 18.03.2012 09:37
Возведение в степень. Drakulov Свободное общение 30 01.03.2011 16:35
возведение в степень Lissisa Помощь студентам 1 21.03.2009 22:34