2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 14:20 
Заморожен


10/11/08
303
Челябинск
Хочу попробовать реализовать тест Люка-Лемера для о-о-очень больших чисел Мерсенна (порядка 39-го числа Мерсенна $M_{39}=2^{13466917}-1$ и больших).
Из википедии:
"Для установления простоты $M_p$ последовательность чисел $L_1,\, L_2,\,...\,,L_{p-1}\; (L_1=4,\; L_{k+1}=L_k^2-2(\mod M_p))$ вычисляется по модулю числа $M_p$ (т. е. вычисляются не сами числа $L_k$, длина которых растёт экспоненциально; а остатки от деления $L_k$ на $M_p$, длина которых ограничена $p$ битами). Последнее число в этой последовательности $L_{p-1}\mod M_p$ называется вычетом Люка — Лемера. Таким образом, число Мерсенна $M_p$ является простым тогда и только тогда, когда число $p$ простое, и вычет Люка — Лемера равен нулю."
Возник вопрос, как вычислить остаток от деления $L_k$ на $M_p$ $(L_k \mod M_p)$ ?

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 14:46 
Заслуженный участник


08/04/08
8562
Иван_85 в сообщении #585978 писал(а):
Возник вопрос, как вычислить остаток от деления $L_k$ на $M_p$ $(L_k \mod M_p)$ ?
Ну в лоб :roll: как там ... $a \mod b$ или $a \% b$ для маленьких чисел... (на каждой итерации, естественно) Или Вы что-то специальное имеете ввиду?

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 15:26 
Заморожен


10/11/08
303
Челябинск
$M_{39}$ имеет 4053946 цифр в десятичной системе счисления. А $L_k$ могут содержать еще больше цифр.
Для того чтобы считать в лоб нужно создать целочисленный тип данных который вмещал бы, скажем, до 1 000 000 000 десятичных цифр (это минимум 500 МБ памяти). Затем определить функции, реализующие умножение, сумму, возведение в натуральную степень и деление по модулю чисел этого типа данных.
Sonic86, Вы это имеете ввиду?

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 15:38 
Заслуженный участник


09/09/10
3729
Иван_85 в сообщении #586004 писал(а):
Для того чтобы считать в лоб нужно создать целочисленный тип данных который вмещал бы, скажем, до 1 000 000 000 десятичных цифр (это минимум 500 МБ памяти). Затем определить функции, реализующие умножение, сумму, возведение в натуральную степень и деление по модулю чисел этого типа данных.

Такие библиотеки давно существуют.

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 15:46 
Заморожен


10/11/08
303
Челябинск
Joker_vD в сообщении #586006 писал(а):
Такие библиотеки давно существуют.

Не подскажете название такой библиотеки для Visual C++ Express ?

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 15:54 
Заслуженный участник


09/09/10
3729
Лично мне известна только WinNTL. Под линукс есть GMP — и надстройки типа CLN и той же NTL.

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 16:01 
Заморожен


10/11/08
303
Челябинск
Joker_vD, спасибо за инфу.

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 16:55 
Заслуженный участник


11/11/07
1198
Москва
Joker_vD в сообщении #586011 писал(а):
Под линукс есть GMP — и надстройки типа CLN и той же NTL.

GMP можно и под виндоуз поставить.

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 17:02 
Заслуженный участник


09/09/10
3729
AV_77
Как верно подмечено в документации к WinNTL, "There are the flags to use GMP for potentially faster long integer arithmetic. See the GMP section for more details. Note that getting GMP to run on Windows is a pain in the neck. If you really want to use GMP, use Unix or Linux!"

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 20:19 
Заморожен


10/11/08
303
Челябинск
Интересно, существует ли быстрый алгоритм возведения натурального числа в квадрат?

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 20:35 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Joker_vD в сообщении #586024 писал(а):
Note that getting GMP to run on Windows is a pain in the neck

Есть форк GMP, называется MPIR. Одной из заявленных целей у них является лучшая поддержка Windows.

Иван_85 в сообщении #586115 писал(а):
Интересно, существует ли быстрый алгоритм возведения натурального числа в квадрат?
Раз быстрое умножение есть, то и быстрое возведение в квадрат тоже.

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 20:41 
Заморожен


10/11/08
303
Челябинск
Xaositect в сообщении #586123 писал(а):
Раз быстрое умножение есть, то и быстрое возведение в квадрат тоже.

Но ведь возведение в квадрат более специальное умножение чем просто умножение. Поэтому для него возможно существует еще более быстрое умножение.

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 22:00 
Заслуженный участник


04/05/09
4587
Иван_85 в сообщении #586126 писал(а):
Xaositect в сообщении #586123 писал(а):
Раз быстрое умножение есть, то и быстрое возведение в квадрат тоже.

Но ведь возведение в квадрат более специальное умножение чем просто умножение. Поэтому для него возможно существует еще более быстрое умножение.
Существует, но не сильно быстрее - например в полтора раза (для оооочень больших чисел).

Кстати, строго говоря, возведение в квадрат медленнее, чем умножение, т.к. входных данных в два раза меньше, а время только в полтора раза меньше. :-)

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение17.06.2012, 22:26 
Заморожен


10/11/08
303
Челябинск
venco в сообщении #586153 писал(а):
Существует, но не сильно быстрее - например в полтора раза (для оооочень больших чисел).

Не подскажете, что за алгоритм?

 Профиль  
                  
 
 Re: Хочу попробовать реализовать тест Люка-Лемера ...
Сообщение18.06.2012, 00:24 
Заслуженный участник


04/05/09
4587
Вам это не надо. Используйте готовую библиотеку, например gmp, - там это уже есть.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group