IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Алгоритм Диффи-Хеллмана, Проблемы с математикой ((
SeregaR1Val
сообщение 26.04.2010 20:12
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


В принципе реализация алгоритма понятна, проблемы с нахождением первообразного корня по модулю m

http://ru.wikipedia.org/wiki/Первообразный..._(теория_чисел)

И понятия не имею как это запрограммировать, если можете, помогите пожалуйста.

В методичке есть реализация на C++, а обучение на Delphi, поэтому непонятно вообще ...


Реализация

Функция powmod() выполняет бинарное возведение в степень по модулю, а функция generator (int p) - находит первообразный корень по простому модулю (факторизация числа здесь осуществлена простейшим алгоритмом за ). Чтобы адаптировать эту функцию для произвольных , достаточно добавить вычисление функции Эйлера в переменной phi.

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;
}


Сообщение отредактировано: SeregaR1Val - 26.04.2010 20:15
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
SeregaR1Val
сообщение 28.04.2010 18:47
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Спасибо. теперь работает лучше, помогите пожалуйста еще с одной деталькой этого алгоритма - создание случайного простого числа ...

function TForm1.Arrayes:integer;
var
k,i,j,d:integer;
begin
k:=1;
PArray[1]:=2; //Массив простых чисел. Для начала первое простое число - 2
for i:=3 to 150 do // Просматриваем чисда 3-150
begin
d:=0;
for j:=1 to k do // Пытаемся разделить число на число из массива простых чисел
if ((i mod PArray[j])<>0) then // Если не делится нацело увеличиваем счетчик
begin
inc(d);
if (d=k) then // Если не делится нацело ни на одно из целых - значит целое
begin
inc(k);
PArray[k]:=j; //Записываем его в массив простых чисел
end;
end;
end;
Randomize;
result:=PArray[Random(k)]; //Результат - случайное простое число из массива
end;

Сам перебираю, вроде все нормально, а в итоге он находит только одно число - 3

Добавлено через 6 мин.
Извините, глупая ошибка была ... нашел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
SeregaR1Val   Алгоритм Диффи-Хеллмана   26.04.2010 20:12
volvo   Ну, а что именно непонятно? У тебя ж есть С++ ный ...   26.04.2010 21:17
SeregaR1Val   TList<Integer> не пропускает, исправил на TL...   27.04.2010 14:42
volvo   Блин... Я все время забываю, что не у всех Дельфи ...   27.04.2010 14:53
SeregaR1Val   Терзают сомнения, что алгоритм описанный в методе ...   28.04.2010 17:46
Ozzя   var r,k:longint;i:integer; begin r:=1; for i:=1 ...   28.04.2010 18:02
volvo   На самом деле она вычисляет (A^2e) mod m, и возвра...   28.04.2010 18:05
SeregaR1Val   Спасибо. теперь работает лучше, помогите пожалуйст...   28.04.2010 18:47
SeregaR1Val   Function TForm1.modes(A,e,m:integer):longint; var ...   28.04.2010 20:06
volvo   Вот это: Function TForm1.modes(A, e, m:integer): l...   28.04.2010 21:01
SeregaR1Val   var PArray:array[1..100] of integer; procedure T...   29.04.2010 9:32
volvo   function TForm1.Arrayes:integer; // Создает случа...   29.04.2010 12:58
SeregaR1Val   Спасибо, стало лучше работать, но g в половине слу...   29.04.2010 14:20
volvo   Ну, а теперь посмотри внимательно на функцию (я не...   29.04.2010 14:27
SeregaR1Val   Спасибо большое! Очень помог!   29.04.2010 15:30


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.07.2025 11:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"