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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2015, 21:36   #1
maxim3535
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 14
По умолчанию sqrt: неоднозначный вызов перегруженной функциb

помогите пожалуйста исправить ошибку в коде алгоритма Диффи хелмена:
еrror C2668: sqrt: неоднозначный вызов перегруженной функции
существует более одного экземпляра перегруженная функция "sqrt", соответствующего списку аргументов

в строке
Код:
for (int i = 3; i <= sqrt(n); i++)
сам код:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <time.h>

using namespace std;

bool isprime(int n);
int q;
int l = 5;
int generate_q()
{
	int q;
	do
	{
		srand(time(NULL));
		q = rand()%512 + 512;
	}
	while (!isprime(q));
	return q;
}

int generate_p()
{
	int p;
	do
	{
		q = generate_q();
		p = q*2 + 1;
	}
	while (!isprime(p));
	return p;
}

bool isprime (int n)
{
	if (n % 2 == 0) return false;
	for (int i = 3; i <= sqrt(n); i++)
		if (n % i == 0) return false;
	return true;
}

int modpow (int g, int q, int p)
{
	for (int i = 0; i <= q-2; i++)
	{
		g *= g;
		if (g > p) g = g%p;
	}
	return g;
}

int generate_g(int p, int q)
{
	int g;
	do
	{
		srand(time(NULL));
		g = rand()%(p-1);
	}
	while (modpow(g,q,p) == 1);
	return g;
}

int xkey (int p)
{
	int x = rand()%(p);
	return x;
}

int ykey (int g, int x, int p)
{
	int y = modpow(g,x,p);
	return y;
}

int session_key (int x, int y, int p)
{
	int z = modpow(y,x,p);
	return z;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int p, g;
	p = generate_p();
	g = generate_g(p, q);
	int x1, x2, y1, y2, z1, z2;
	x1 = xkey(p);
	y1 = ykey(g, x1, p);
	srand(time(NULL));
	x2 = xkey(p);
	y2 = ykey (g, x2, p);
	z1 = session_key(x1, y2, p);
	z2 = session_key(x2, y1, p);
	cout << "P: " << p << "\nG: " << g << endl;
	cout << "User 1: x = " << x1 << ", y = " << y1 << endl;
	cout << "User 2: x = " << x2 << ", y = " << y2 << endl;
	cout << "Z1: " << z1 << "\nZ2: " << z2 << endl;
	system("pause");
	return 0;
}
maxim3535 вне форума Ответить с цитированием
Старый 29.03.2015, 21:49   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Код:
i <= sqrt(n)
Меняем на
Код:
i <= sqrt(1.0*n)
или
Код:
i <= sqrt((double)n)
Poma][a вне форума Ответить с цитированием
Старый 29.03.2015, 22:04   #3
maxim3535
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 14
По умолчанию

спасибо огромное!
maxim3535 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с перегруженной подпрограммой axpehuct123 Помощь студентам 5 11.05.2014 15:03
error C2668: sqrt: неоднозначный вызов перегруженной функции Александр112 Visual C++ 7 25.04.2014 13:10
нет перегруженной функции, принимающей 2 аргументов Ghostik Visual C++ 2 10.04.2012 15:06
Вычислить sqrt(1.1+sqrt(1.2+...+sqrt(10) taka Помощь студентам 2 04.12.2011 09:44
С++sqrt: неоднозначный вызов перегруженной функции Crazy_caramel Помощь студентам 10 13.11.2009 19:13