У меня геометрическая прогрессия, как у серии:
S = x1 + x2 + ..... xn (mod m)
where xi = (x(i-1))*r (mod m) for i>1 and x1=1 , 2<=m<10^9, 1<=r<m, 1<=S<m, 1<=n<p
здесь m простое число и известны r, m, S.
Property of r : If we form a set of r (mod m), r^2 (mod m), ..., r^(m-1) (mod m) then it will contain all the numbers form 1 to m-1.
Я хочу найти значение n
(если возможно). Я не могу применить здесь формулу геометрической прогрессии (GP
), поэтому я сделал альтернативный алгоритм, предполагая, что эти степени будут делать цикл намного меньшей длины, чем n-1
. Я подумал найти такую закономерность, чтобы серия повторялась, но эта модель цикла встречается только у некоторых r's
, поэтому я не смог этого сделать. Конечно, наивный подход установки цикла до m
не сработает, потому что он слишком велик и, следовательно, требует много времени до завершения.
Я обнаружил аналогичную проблему здесь. Но в этой ссылке на r
нет свойства сделать алгоритм быстрее. Я применил все приведенные здесь ответы к своему коду, но ни один из них не снижает его сложность должным образом.
Я знаю, что каким-то образом мне нужно использовать свойство r
, чтобы создать эффективный алгоритм, но я не знаю, как это сделать.
Итак, есть ли какой-либо другой шаблон, который мы можем найти, или какое-либо использование этого свойства, которое мы можем сделать, чтобы получить наиболее эффективный алгоритм? (Обычно я не хочу повторять m
.) Поэтому, пожалуйста, дайте мне представление об эффективном алгоритме поиска n
.
r,r^2,....r^(n-1) then it will contain all the numbers [from] 1 to m-1
. Вы имеете в видуr (mod m), r^2 (mod m), ..., r^(n-1) (mod m)
? - person ljeabmreosn   schedule 18.06.2017m
неn
во власти. - person Daemon   schedule 18.06.2017xi = (x(i-1))*r (mod m) for i>1 and x1=1
не подразумевает, чтоS = 1 + r + r^2 + r^3 + ... + r^n (mod m)
? - person ljeabmreosn   schedule 18.06.2017a1 + (a1*r)%m + ((a1*r)%m*r)%m + ... .
Здесь, если я возьму 3-й член .... тогда вы можете написать((a1%m)*(r%m))%m * (r%p))%m = (a*r^2)%m...
Soa1 + (a1*r)%m + (a1*r^2)%m.. a1*r^(n-1)%m....
= ›Ваш результат доr^(m-1)
, хотя ... тогда вы можете заменить их суммой1 to m-1
. Я подумал, что и найти сумму, но тем не менее, он завершался раньше, чем требуется, и в некоторых тестовых случаях показывал неправильные результаты. Мы можем поговорить в facebook или gmail ?? - person Daemon   schedule 18.06.2017