2014 dxdy logo

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

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


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


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

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

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

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

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



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 22:12 


23/10/12
6
товарищи! спасибо за советы всем! для 5000 длинных чисел поиск в лоб действительно не долгий. но дело в том что в перспективе количество чисел может возрасти чуть ли не в 100 раз. и тогда временные затраты уже будут существенными.
VAL, какую длину имели сгенерированные вами числа?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 22:16 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Если чисел много, то их попарных НОДов - многажды много, так что выписывать замучаешься, если бы даже их вычисление доставалось даром. Они Вам точно все нужны?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 22:32 


23/10/12
6
действительно именно это и нужно.
ну а если упростить задачу до проверки пар этих чисел на взаимную простоту? как это сделать максимально быстро?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 22:36 
Заслуженный участник


27/06/08
4062
Волгоград
sundayafternuun в сообщении #635389 писал(а):
VAL, какую длину имели сгенерированные вами числа?
150 десятичных знаков.
Вот код:
Код:
> r:=rand(10^149..10^150):
> tt:=proc() local i,j;
> for i to 5000 do a||i:=r() od;for i to 4999 do
> for j from i+1 to 5000 do
> igcd(a||i,a||j);
> od od end:
> time(tt());

                               138.312

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение25.10.2012, 10:21 
Заслуженный участник


12/09/10
1547
sundayafternuun в сообщении #635401 писал(а):
ну а если упростить задачу до проверки пар этих чисел на взаимную простоту? как это сделать максимально быстро?

Проверяете на малые делители, скажем первые 50 простых чисел. Результат записываете в битовый массив. Это значительно сузит список кандидатов. Далее Евклид.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение25.10.2012, 11:03 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Ни черта это не сузит. Вернее, сузит список НОДов, отличных от единицы. А толку-то? Каждый из них всё равно придётся находить, и единицы тоже.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение25.10.2012, 11:18 
Заслуженный участник


12/09/10
1547
Мы будем проверять только пары, не имеющие общих малых простых делителей. Эффект безусловно будет. Ну, например, зачем искать НОД у четных чисел, если нам только нужно знать взаимно просты они или нет?

-- Чт окт 25, 2012 12:22:19 --

Цитата:
Вернее, сузит список НОДов, отличных от единицы

Этого и добиваемся.
Еще раз цитирую задачу:
Цитата:
ну а если упростить задачу до проверки пар этих чисел на взаимную простоту? как это сделать максимально быстро?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение25.10.2012, 11:57 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Да, эффект будет, но слабенький - не в разы. Ведь примерно 61% пар не имеют никаких общих делителей, ни больших, ни малых. Их не удастся отсечь Вашим просеиванием, и придётся прокатывать Евклидом всё равно.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение25.10.2012, 12:31 
Заслуженный участник


12/09/10
1547
Примерно так, это верно. А я и не обещал многократного сокращения. Полную гарантию взаимной простоты может дать только честное вычисление НОД. А после просеивания практически каждое применение Евклида будет давать единицу.
Кстати, Евклида можно остановить будет чуть раньше. Особенно, если предварительно проверить числа на простоту. Это тоже может дать 5-10% выигрыша.
Да, и, наверное, для таких больших чисел бинарный поиск НОД эффективнее будет?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение25.10.2012, 14:05 


23/10/12
6
я пока пользуюсь бинарным поиском,однако при больших объемах он тоже занимает много времени. хотелось бы как-то ускорить. всё-таки пока все предложенные способы дают незначительный выигрыш. может будут еще идеи? в любом случае всем спасибо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2

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



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

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


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

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