Цитата(MrYuran @ Apr 2 2009, 10:17)

Чето мне подсказывает про
поля ГалуаУгу. Насколько я ничего не понимаю, это поле Галуа с определяющим полиномом X^2+X+1. X - к-кортеж (N=2^k). Фактически это задача нахождения индекса элемента в поле.
Цитата(Nemo2000 @ Apr 2 2009, 10:06)

1. Ищем такое минимальное n, при котором корень будет целым числом.
Алгоритм в целом правильный. Но для x=2^24-1 придется искать корень 2^24-1 число раз. Перебором будет проще и быстрее.
ReAl на сахаре попытался решить уравнение x = [-1 + sqrt(1 + 8*(n*2^k + y)) ] / 2 аналитически. Очевидно, что подкоренное выражение должно быть квадратом. Поскольку присутствует деление на 2 и -1, то квадратом нечетного числа, или числом вида (2m + 1)^2. Подстановка под корень этого выражения дает тождество x=m. Попытка решения уравнения 1+8(n*2^k + y) = (2m+1)^2 приводит к исходному уравнению:
1+8(n*2^k + y) = 4m^2+4m+1
8(n*2^k + y) = 4m^2+4m
2(n*2^k + y) = m^2+m
2(n*2^k + y) = m(m+1)
n*2^k + y = m(m+1)/2
Круг замкнулся.
Вчера мне пришел в голову более простой алгоритм: элементы этого поля представляют собой суммы членов арифметической прогрессии. Т.е. x[n] = (x[n-1]+x) mod 2^k. То есть вычитая из y по модулю 2^k числа x = 1,2,3... до получения 0 мы находим х за максимум 2^k - 1 вычитаний. Ну или восстанавливая последовательность x суммированием последовательности 1,2,3... по модулю 2^k до совпадения результата с y, что то же яйцо, только в профиль.
Но должен же быть какой-то алгоритм побитового восстановления, вроде деления полиномов!