maxal писал(а):
Руст писал(а):
Я вроде бы на русском языке четко поставил задачу. В чем непонятки-то?
В том то и дело, что условие было сформулировано так, что каждый раз приходилось догадываться что же вы на самом деле хотите?.
1. Не понятно зачем
.
2. Чем не понравилось первоначальное решени?
Вообще то, что найти образующую, что квадратичный невычет всё равно надо перебирать простые q примерно до
и проверить по полиномиальному тесту возведения в степень. Только здесь бесполезна (и не нужна) проверка, что g является образующей.
Однако, гипотеза о том, что проверка до
достаточно не доказано, доказаны результаты типа
как для минимальной образующей так и для минимального квадратичного вычета. Т.е. что указанный алгоритм всегда закончится за полиномиальное время не доказано (на практике эта гипотеза оправдывается). Вроде имеется доказательство о том, что в среднем (по всем простым меньше х) это действительно полиномиальное.
3. С точки зрения решения эта задача эквивалентно более общей: найти примитивные корни х:
. Общая задача решается абсолютно так же. Находится необходимое условие
, если
то возводим числа a в степень c
и если для всех
то x примитивный корень по модулю p. Возводим k-1 раз в p - ую степень по модулю
потом по модулю
,... по модулю
и получим примитивный корень по модулю
. Остальные примитивные корни по модулю
находятся возведением полученного решения по модулю
в степени взаимно простые по модулю n.
Если дадите ответ на указанные вопросы, может пойму смысл вашей задачи.