haqz, опять что-то непонятное у вас. Научитесь уже формулировать вопросы.
Дано: ?
Найти: ?
Ограничения.
Пока так понимаю, что вам надо подобрать такие гамма и дельта (константы), Что любое число X <= 2^120 после домножения на гамма, деления на дельта и деления на произвольное i < 2^30 давало 1?
Вы получили a^n=a^16 используя только преобразования без случаев, поэтому других вариантов нет. Но, кроме 16 могут быть дргие ответы, если a^k=1. В частности, для вещественных, если a=1, то n может быть любое. Но в этом задании видно, что a!=1.
С комплексными - если a корень из 1, то есть и другие ответы.
Можно доказать, что других комплексных вариантов нет. Если |a|!=1, то n - только 16. Если же модуль 1, то надо взять аргумент от обеих частей и получится, что (n-16)x =2 pi k, где x= Arg(a), k - целое.
Это имеет отличные от n=16, k=0 решения, если x= 2pi k/(n-16), т.е. a - корень из 1.
Теперь осталось доказать, что заданному уравнению не полходят корни из 1.
Надо подобрать a,b,c,d так, что любое/как можно больше x= random.randint(2**119,2**120) после домножения на 1/a*b/c*d было меньше 10^70?
Ответ - НИКАК!
(если не считать тривальный случай a=b=c=1, d = 0, но вряд ли вам это подходит).
Могу вам математически доказать, что какие бы вы a/b/c/d не выбрали, результат всегда будет меньше T ровно для каждого T/N (В вашем случае T~2^70, N~2^256 T/N~= 2^-180). Это очень маленький шанс.
Если бы T = 1 А N=239, то какие бы вы a/b/c/d не выбрали, ответ будет хорошим ровно в 1/239 случаев.
RINCODE, Ах, или я читал жопой, или вы отредактировали вопрос. Теперь там надо до 2^70. Что понижает шансы на успех с одной 10-ти-миллионной до 2^-50, что совсем печально.
Какие бы вы константы a/b/c/d не взяли результат будет меньше k ровно для k/N входных данных.
Потому что это умножение на константу по модулю N и оно обратимо.
Поэтому что ни делай, какие константы не подбирай, результат будет меньше 10^70 d 10^70/10^78 = 10^-8 случаев. Никакой 1/7 и даже 1/1000 тут и не пахнет.
Kryptonit, еще раз, geometry - это указатель. Это 8 байт, хранящие адрес чего-то. Операция присваивания у вас не копирует никакие данные, а запоминает адрес локального массива. По выходу из функции локальный массив - все. Что такое область видимости вы знаете? И у вас остается в geometry адрес пустоты, памяти, где когда-то были нужные данные. В месте, где вы их выводите, так получается, что это место переиспользуется для других данных, которые для вас мусор, хоть и постоянный.
yatanai, А как он должен определить, какой тип вы хотите использовать? Он вообще-то не может посмотреть через знак "=" и понять, что вы присваиваете int, значит вам нужен int. Можно же в int присваивать и char и short.
Wataru
@wataru Автор вопроса, куратор тега Математика
Anton F, Период и так известен. Это M (если сократить k и m на gcd, как указано в вопросе). Именно эта идея с отбрасыванием полных периодов уже расписана в вопросе (абзац "Дальше, можно считать, что N < M...") И сложность остается O(N % M), что ничем не лучше, если N < M.
mayton2019, Alexandroppolus, -1, очевидно, означает, что ответа на задачу нет. Например, даже один повтор A-B два раза пересечет искомую точку, а введено K=1.
Но без полного условия задачи с форматом ввода не все понятно.
delta = 1
gamma = 1
i = 0x9fd24b3abe244d6c443df56fa494dc
Или
delta = 0x9fd24b3abe244d6c443df56fa494dc
gamma = 1
i = 1