Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
#1

ошибка в программе - C++

24.11.2013, 17:06. Просмотров 348. Ответов 12
Метки нет (Все метки)

int alice(int n,int g,int x)
{
long int a,a1;
a1=pow(g,x);
a=a1%n;
return(a);
}

Ошибка 2 error C2668: pow: неоднозначный вызов перегруженной функции c:\users\user\documents\visual studio 2010\projects\45\45\23.cpp 37 1 45 как изменить чтобы работало?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 17:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ошибка в программе (C++):

ошибка в программе - C++
скажите где ошибка и как её исправить? #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> ...

Ошибка в программе - C++
Выдаёт ошибку 'massiv' was not declared in this scope в 58 строке. Помогите понять в чем проблема... #include <iostream> using...

Ошибка в программе - C++
Здравствуйте.Помогите новичку только осваиваю C++ ничего не выходит C# знаю. Помогите исправить программу в консоле. #include...

Ошибка в программе - C++
Помогите запустить программу,а то пишет: C:\Users\Desktop\source\deykstra.cpp|4|fatal error: iostream.h: No such file or directory| Вот...

Ошибка в программе - C++
Доброго времени суток. Только недавно начал пробовать что то ваять на С, пока все получалось до этого момента. #include "stdafx.h" ...

ошибка в программе - C++
исходная программа считывает строки и проверяет, являются ли они палиндромами #include <iostream> int main() { char*...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.11.2013, 17:09 #2
C++
1
a1 = static_cast<long int>(pow(static_cast<double>(g), x));
0
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 17:19  [ТС] #3
у меня неправильно вычисляет помогите исправить:
using namespace std;
#include<conio.h>
#include<iostream>
#include<math.h>

int alice(int,int,int);
int bob(int,int,int);

void main()
{
long int g,x,y,a,b,k1,k2,n;

cout<<"\n\t Enter value of n & g";
cin>>n>>g;

cout<<"\n\t Enter value of x & y";
cin>>x>>y;

a=alice(n,g,x);
cout<<"\n\t alice end value:"<<a;

b=bob(n,g,y);
cout<<"\n\t bob end value:"<<b;

k1=alice(n,b,x);
cout<<"\n\t valueof k1 :"<<k1;

k2=alice(n,a,y);
cout<<"\n\t valueof k2 :"<<k2;

getch();
}

int alice(int n,int g,int x)
{
long int a,a1;
a1 = static_cast<long int>(pow(static_cast<double>(g), x));
a=a1%n;
return(a);
}

int bob(int n,int g,int y)
{
long int b,b1,k2,t2;
b1 = static_cast<long int>(pow(static_cast<double>(g), y));
b=b1%n;
return(b);
}

Добавлено через 4 минуты
нужно чтобы при введении 97 и 5,а х и у: 36 58,ответ должен быть 75 у обоих
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.11.2013, 17:28 #4
Цитата Сообщение от Жасулан Посмотреть сообщение
нужно чтобы при введении 97 и 5,а х и у: 36 58,ответ должен быть 75 у обоих
Видимо проиходит переполнение int, попробуй использовать более "емкий" тип вместо int, либо число с плавающей точкой (правда тут уже возможны погрешности, зато приведения в pow будут не нужны).
0
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 17:31  [ТС] #5
дело в том что n и g это простое и взаимно простое число, это реализация диффи хелмана. а какой тип можноиспользовать?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.11.2013, 17:48 #6
Жасулан, проблема в том, что в С++ у встоенных целочисленных типов есть ограничения по диапозону, они не безразмерные, и выход за пределы диапозона никак не контролируется - ваши числа могут просто "не влезть"; самые "длинные" из целочисленных - unsigned long int (либо unsigned long long int, если есть), можете это попробовать. Либо long double - самый точный из встоенных с плавающей точкой - но там могут быть значительные погрешности за счёт особенностей представления. "Длинных" целочисленных типов из коробки в С++ нет - для этого обычно используют сторонние библиотеки.

Добавлено через 3 минуты
и да, само использование pow может привести к погрешностям, т.к. она использует числа с плавающей точкой.
0
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 17:54  [ТС] #7
gray_fox, если хотите я вам отправлю алгоритм диффи и вам будет поняней о чем идет речь

Добавлено через 3 минуты
gray_fox, на этой книге на 483 странице посмотрите пожалуйста http://padabum.com/d.php?id=45432
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.11.2013, 17:54 #8
Жасулан, не надо, я знаю, что такое протокол Диффи-Хеллмана) я говорил о том, что у вас наверняка переполнение, и какие с этим могут быть проблемы, вот и всё.
0
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 18:02  [ТС] #9
gray_fox, значит мне только нужно изменить инт на unsigned long int,а программа в целом правильна?

Добавлено через 6 минут
дело в том что тут не целые числа а простые
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.11.2013, 18:06 #10
Жасулан, ну секретный ключ считаете правильно (только вот функции alice и bob у вас тоже самое делают). unsigned long int - ну попробуйте на этих числах, только на других (более больших) числах всё равно в итоге будет переполнение - здесь всё зависит от того, какими числами оперируете; если будет достаточно unsigned long int - используйте его. Конкретный диапозон зависит от реализации - я не могу так сказать, подойдёт, или нет.
0
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 18:29  [ТС] #11
спасибо, а вообше как программировать такую арифметику: y=a(в степени n)modq

Добавлено через 2 минуты
спасибо большое! можно еще вопрос: как можно написать на программном языке такую арифметику: y=a(в степени n)mod q

Добавлено через 17 минут
gray_fox, спасибо большое! можно еще вопрос: как можно написать на программном языке такую арифметику: y=a(в степени n)mod q
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.11.2013, 18:51 #12
Жасулан, эмм... у вас так всё и написано по сути...
0
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
24.11.2013, 18:56  [ТС] #13
gray_fox, я хотел бы чтобы она первоначально работала именно с маленкики простыми числами но она неправильно вычисляет
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 18:56
Привет! Вот еще темы с ответами:

ошибка в программе - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include &lt;string&gt; #include &lt;ctype.h&gt; ...

Ошибка в программе - C++
нужно найти кол-во нулевых элементов в массиве #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using...

Ошибка в программе! - C++
найти минимальное положительное целое число Q такое, что произведение цифр числа Q в точности равняется N. Выведите целое число Q. Если...

Ошибка в программе - C++
Ребят привет, помогите в программе найти ошибку, вообще не понимаю #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;clocale&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.11.2013, 18:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru