Как стать автором
Поиск
Написать публикацию
Обновить
0
0
Евгений Грицкевич @qwaker

Пользователь

Отправить сообщение
#1: 2313.75 d:2286.51 h:-7261.82/411.94m (gen 1149)

Машинка нашла баг в движке. Она на старте застревает, а потом подпрыгивает в небо на вот такое расстояние.
В беларуси не пишут латиницей :)
Не знаю, это не сложно придумать.

Пусть i наименьшее число, что gi равно 1, тогда если i = p-1, то g первообразный иначе нет.
Очевидно, что gi*x равно 1 для целых x и только они (из-за наименьшести i). Тогда из того что мы проверили gp-1 = 1 следует что p-1=i*x, то есть i делит p-1, что тоже самое что «i равно p-1, или i делит хоть что-то из (p-1)/ki». Если i = p-1 — все отлично, иначе если i делит (p-1)/ki то g(p-1)/ki тоже будет равно 1, что мы собственно и проверяем.
> Как искать первообразный корень? Я использую полный перебор, начиная с 2 до p

Можно ускорить проверку числа на первообразность. Пусть p-1 = k1a1k2a2k3a3… — разложение на простые множители, тогда если g(p-1)/ki mod p не равно 1 для всех i, а gp-1 равно 1, то g — первообразный корень.
Всего таких k для каждого числа очень мало. Разложить все числа от 2 до p на простые множители можно тоже относительно быстро с помощью решета Эратосфена.

Таким образом можно перебрать за приемлемое время первообразный хоть для p порядка 109 :)
Спасибо, как увидел шифр сразу в интерпретатор питона бегом :) подсказка помоему зря ;)
Да, russian code cup в этом году проводился впервые, но организаторы обещали каждый год повторять данное событие, тем более что дебют прошел на ура!

Информация

В рейтинге
Не участвует
Откуда
Мозырь, Гомельская обл., Беларусь
Работает в
Дата рождения
Зарегистрирован
Активность