Rambler's Top100
 
 
  04 декабря 2008 года Компьюлента
CIO
Терралаб
Бизнес-журнал
в поле зрения | обзоры и тесты | своя игра | интерактив
Гонки по вертикали
Автор: Леонид Дурман
Опубликовано в журнале "Компьютерра" №18 от 16 мая 2001 года

Окончание. Начало в #393, 394

Секреты ремесла

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

Сегодня единственный известный способ поиска для m > 25 - это тривиальный перебор простых делителей, имеющих вид D = k•2n + 1, где n і m + 2. Операция деления Fm на D относительно простая, так как в ней используется модулярная арифметика. Чтобы доказать, что Fm делится на D, необходимо m раз произвести вычисления по рекуррентной формуле Si = S2i-1mod D, где S0 = 2. Если Sm = -1, то делитель найден. Кроме того, можно ускорить вычисления в разы, если не искать делитель для конкретного Fm, а, взяв фиксированное n и нечетное k, выполнять вышеуказанные действия не более n - 2 раз, проверяя каждый раз условие Si = -1. Другими словами, в процессе поиска выясняется следующее: может ли фиксированный делитель делить какое-нибудь число Ферма? 1

На первый взгляд кажется, что все очень просто. Однако при вычислениях приходится сталкиваться с числами, превышающими разрядность компьютеров. В известной Библии для программистов Дональд Кнут 2 собрал компьютерные алгоритмы почти на все случаи жизни, в том числе и для решения этих проблем. Примем S2 = X•2n + Y (1), где числа X и Y получаются отсечением n бит двоичном представлении числа S2. Если k меньше разрядности компьютера, то мы можем относительно легко найти два числа: q - частное и r - остаток, полученные при делении X на k. Тогда выражение (1) можно записать: S2 = Y - q + 2nr(mod k•2n + 1). Но самой длинной и сложной операцией является возведение в квадрат. Если это делать «классическим» методом, то его сложность пропорциональна n2. Для больших чисел (больше тысячи знаков) это становится серьезной проблемой. Но математики нашли выход. В 1968 году Ф. Штрассен (V. Strassen) применил дискретное преобразование Фурье для умножения больших чисел. В этом случае необходимое количество вычислений пропорционально n•ln n. Этот продуктивный но сложный метод мы оставим за рамками статьи 3.

И все же модулярное деление Fm на D требует больших затрат времени. Чтобы ускорить перебор, мы должны брать «подходящие» (то есть простые) делители. Наша задача стала чуть легче. Но для дальнейшего повышения эффективности вычислений необходимо еще и быстро устранять большинство D.

Достаточно в начале вычислений найти много простых чисел p, тогда для каждого p находим такое k0, чтобы соблюдалось тождество k02n == -1 (mod p), получая после преобразования -k0 = ((p + 1) / 2)n (mod p). Тогда мы сможем применить известное со школы решето Эратосфена и отсеять все неподходящие k, как k0, k0 + p, k0 + 2p, … Если взять 100000 простых чисел, то отбрасывается примерно 92% нечетных k.

Еще один прием оптимизации любой численной программы состоит в замене деления умножением на обратную величину (один раз вычисляем значение 1/x, а затем используем только операцию умножения) 4. Посмотрите внимательно: основная наша задача - делить числа, но во всем основном алгоритме программы Fermat нет ни одной команды деления.

F31 умер. Да здравствует F33!

Я до сих пор не могу в это поверить. 12 апреля произошло важное событие: немец Александр Круппа (Alexander Kruppa), используя программу MFAC Тони Форбса (Tony Forbes), неожиданно обнаружил делитель для числа F31, равный 46931635677864055013377. Математическое сообщество буквально всколыхнулось и поздравило виновника торжества и друг друга. Ричард Крендалл тут же отметил, что этот делитель не мог быть обнаружен другими эффективными методами, например методами «p - 1» и «p + 1».

F31 = 22147483648 + 1 - число особенное. Это последнее число Ферма, простота которого теоретически могла быть доказана на суперкомпьютерах хотя бы в ближайшие сто лет. Если бы оно оказалось простым, то был бы побит рекорд самого большого известного простого числа 26972593 - 1. Видимо, все же придется переосмыслить гипотезу о бесконечности простых чисел Ферма. Следующие подряд идущие числа Ферма, характер которых не известен, - F33, F34, F35. Если не удастся обнаружить для них относительно небольшой делитель, то доказать их простоту человечество не сможет, вероятно, никогда. Начинается новая дьявольская гонка по устранению этих и других чисел из списка теоретически претендующих на роль самого большого известного простого числа.

Присоединяйтесь

Почему среди более чем полусотни человек, обнаруживших делители чисел Ферма, только трое россиян? Неужели русская школа программирования столь слаба или у нас компьютеры хуже? Вы не знаете, чем их занять? Так присоединяйтесь, еще очень многое надо сделать. Подробности на сайте www.fermatsearch.org.

P. S. Когда статья была уже готова, пришло сообщение о том, что еще один шаг сделал германский профессор Петер Гробстих (Peter Grobstich). Используя программу Fermat.exe, он нашел, что число F34 делится на 482524552001•297 + 1. Гробстих весьма горд этим открытием и уже создал сайт, на котором рассказывает о своей работе (www.fh-nb.de/geo-inf/news/index.asp).

Кто следующий?

[i39559]


1 (обратно к тексту) - До сих пор в Интернете публикует свои работы некий Joe McLean‘s, который проделал гигантскую работу в поисках делителя для конкретного числа Ферма, но ему не суждено было найти новый делитель таким путем.
2 (обратно к тексту) - Дональд Кнут «Искусство программирования» тт. 1-3, ИД «Вильямс», 2000. Рекомендую приобрести эту книгу всем программистам, которые себя таковыми считают. О Д. Кнуте и его работе см. недавнюю тему номера в «КТ» #387.
3 (обратно к тексту) - Для интересующихся подробности на www.fftw.org.
4 (обратно к тексту) - Тут важно не забывать про округление результата. Операция деления - самое слабое место любого процессора - выполняется за 38-40 тактов. Для операции умножения необходимо менее 4 тактов.

ТАКЖЕ В РАЗДЕЛЕ
01 сентября 2005 года
Веселые фракталы 
04 февраля 2003 года
Компьютеррный гороскоп 
 
САМОЕ ПОПУЛЯРНОЕ
Тонкости анонимного серфинга в Сети
Сегодня мы будем учиться заметать следы. Правда, не настоящие, а виртуальные, всякий раз оставляемые пользователем при работе в Интернете и с большим удовольствием потребляемые всевозможными онлайновыми сервисами.
О Смысле Всего Сущего
Евгений Козловский так обстоятельно подошел к вопросам читателей "КТ-Онлайн", что интервью пришлось разделить на две части. Но историю происхождения "Огородов" можно узнать уже сегодня!
Такие разные спутники
Александр Трухачев, директор российского представительства MIO Technology, завел свой блог на "КТ-Онлайн", чтобы рассказать об особенностях рынка потребительской электроники в России. Но для начала - о GPS и ГЛОНАСС.
Текстовые развлечения
Поработаем в жанре ASCII Art и расскажем, как научиться рисовать при помощи символов, как переводить изображение любого формата в текстовый файл и как взглянуть на интерфейс Windows сквозь призму псевдографики.
/  бумажный номер

Тема номера: Кризис в ИТ Читайте на сайте тему номера "Кризис в ИТ" и другие статьи из журнала "Компьютерра" от 04 ноября 2008 года
  Архив номеров журнала

О проекте | Реклама на сайте | Рассылки сайта | КПК–версия | RSS-трансляция

© ООО «Компьютерра–Онлайн», 1997 — 2008.
При цитировании и использовании любых материалов ссылка на портал «Компьютерра–Онлайн» обязательна (для Интернет–изданий — www.computerra.ru)
Редакция сайта: site@computerra.ru
Техподдержка сайта: websupport@computerra.ru
Редакция журнала: inform@computerra.ru
Отдел рекламы: reklama@computerra.ru
Телефон: (495) 232–22–61, (495) 232–22–63
Работает на «Битрикс: Управление сайтом»
Почта защищена сервером «СПАМОРЕЗ»
Трилан — продвижение сайта,
поисковая оптимизация сайта

Сайт работает на сервере DEPO Computers
Rambler's Top100