Modulo Arithmetic in Modified Geometric Progression

谁说胖子不能爱 提交于 2019-12-13 10:44:09

问题


We know that sum of n terms in a Geometric Progression is given by Sn = a1(1-r^n)/(1-r) if the series is of the form a1, a1*r, a1*r^2, a1*r^3....a1*r^n.

Now i have modified geometric progression where series is of the form a1, (a1*r) mod p , (a1*r^2) mod p, (a1*r^3) mod p.....(a1*r^n)mod p where a1 is the initial term, p is prime number and r is common ratio. Nth term of this series is given by: (a1 * r^n-1) mod p.

I am trying to get summation formula for above modified GP and struggling very hard. If anyone can throw some light on it or advice on finding efficient algorithm for finding sum without iterating for all the n terms, will be of great help.


回答1:


Note that if r is a primitive root modulo p. Then we can reduce complexity of the sum.

We have to find S = a1*1 + a1*r + a1*r^2 + ... + a1*r^n. Then we write S in the closed form as S = a1*(r^n - 1) / (r - 1).

Now it can be reduced to:

 a1*(r^n - 1) / (r - 1) = S (mod p)
=> a1*r^n = S * (r - 1) + 1 (mod p)

Now take discrete logarithm with base r both sides,

   log(a1*r^n) = log_r(S*(r-1) + 1 (mod p))
   =>log_r(a1) + n*log_r(r) = log_r(S*(r-1) + 1 (mod p))
   =>n*log_r(r) = log_r(S*(r-1) + 1 (mod p)) - log_r(a1) (mod(p-1))
   =>n*1 = log_r(S*(r-1) + 1 (mod (p-1))) - log_r(a1) (mod (p-1))

Note that if a1 is 1 then the last term is 0.

Let S = 6, r = 3, and m = 7, a1 = 1. Then, we want to solve for n in the following congruence:

     (3^n - 1)/(3 - 1) = 6 (mod 7)
=> 3^n - 1 = (3 - 1) * 6 (mod 7)
=> 3^n = 2 * 6 + 1 (mod 7)
=> 3^n = 6 (mod 7)

Then we take the discrete logarithm of both sides:

     log_3(3^n) = log_3(6) (mod (7-1))
=> n * log_3(3) = log_3(6) (mod 6)
=> n * 1 = 3 (mod 6)
=> n = 3 (mod 6)

So, n = 3.

You can use Baby-step Giant-step algorithm to solve this in O(sqrt(m)). If you want implementation in code I will provide you.




回答2:


The principal relation is the same, the sum x is the solution of

a1*(r^N-1) = (r-1)*x mod p. 

The difficulty to observe is that p and r-1 may have common divisors, which is not really a problem as r-1 divides into r^N-1, but still requires careful handling.

Modular division can be achieved via multiplication with the inverse and that can be computed via the extended Euclidean algorithm. Any implementation of

 d,u,v = XGCD(r-1,p) 

returns the largest common divisor d and Bezout factors u,v so that

u*(r-1)+v*p = d

Multiplication with f/d, f = a1*(r^N-1) results in

(u*f/d)*(r-1) + (v*f/d)*p = f = a1*(r^N-1)

so that the solution can be identified as x = u*(f/d). An implementation will thus follow the lines of

 rN = powmod(r,N,p)
 f = a1*(rN-1) mod p

 d,u,v = XGCD(r-1,p)

 return u*(f/d) mod p


来源:https://stackoverflow.com/questions/44613643/modulo-arithmetic-in-modified-geometric-progression

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!