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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 00:55   #1
Samopal
Пользователь
 
Аватар для Samopal
 
Регистрация: 23.12.2008
Сообщений: 24
По умолчанию Первообразный корень по модулю

Может ли кто нибудь подсказать алгоритм вычисления первообразного корня по модулю?...

в контрольной надо написать систему обмена ключами Диффи-Хеллмана... Всё вроде бы как написал.. осталось только вот этот первообразный корень по модулю вкрутить....
www.mybrest.net
Samopal вне форума Ответить с цитированием
Старый 05.04.2011, 01:38   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тырк
первая ссылка с гугла
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.04.2011, 20:01   #3
Samopal
Пользователь
 
Аватар для Samopal
 
Регистрация: 23.12.2008
Сообщений: 24
По умолчанию

Так то оно да.....
Это я тож нашёл...

но сам алгоритм вычисления первообразного корня по модулю не могу вдуплить... =( как...
www.mybrest.net
Samopal вне форума Ответить с цитированием
Старый 06.04.2011, 19:49   #4
Samopal
Пользователь
 
Аватар для Samopal
 
Регистрация: 23.12.2008
Сообщений: 24
По умолчанию

Вот у меня есть код этой штуки нс С++

Код:
int powmod (int a, int b, int p) {
	int res = 1;
	while (b)
		if (b & 1)
			res = int (res * 1ll * a % p),  --b;
		else
			a = int (a * 1ll * a % p),  b >>= 1;
	return res;
}
 
int generator (int p) {
	vector<int> fact;
	int phi = p-1,  n = phi;
	for (int i=2; i*i<=n; ++i)
		if (n % i == 0) {
			fact.push_back (i);
			while (n % i == 0)
				n /= i;
		}
	if (n > 1)
		fact.push_back (n);
 
	for (int res=2; res<=p; ++res) {
		bool ok = true;
		for (size_t i=0; i<fact.size() && ok; ++i)
			ok &= powmod (res, phi / fact[i], p) != 1;
		if (ok)  return res;
	}
	return -1;
}
мог бы мне кто помоч переделать это на паскаль?
www.mybrest.net
Samopal вне форума Ответить с цитированием
Старый 09.04.2011, 15:51   #5
Samopal
Пользователь
 
Аватар для Samopal
 
Регистрация: 23.12.2008
Сообщений: 24
По умолчанию

народ ну неужели так сложно? =\
www.mybrest.net
Samopal вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
взятие остатка по модулю whtfng Помощь студентам 4 30.05.2010 17:32
Сложение по модулю Kycaka Общие вопросы C/C++ 12 04.06.2009 21:58
Обратное о модулю Cakeinpanic Общие вопросы C/C++ 1 04.06.2009 08:32
Вопросы к модулю Red_Line Помощь студентам 0 09.04.2009 16:56
форма к модулю Ilius Общие вопросы C/C++ 18 13.12.2008 16:20