Exemple #1
0
 def _fib_res(self, n, p):
     """ fibonacci sequence nth item modulo p """
     if n == 0:
         return (0, 1)
     a, b = self._fib_res(n >> 1, p)
     c = mod((mod(a, p) * mod(((b << 1) - a), p)), p)
     d = mod((powmod(a, 2, p) + powmod(b, 2, p)), p)
     if n & 1 == 0:
         return (c, d)
     return (d, mod((c + d), p))
Exemple #2
0
 def get_n_mod_d(self, n, d, use="mersenne"):
     if n < 0:
         ValueError("Negative arguments not implemented")
     if use == "gmpy":
         return mod(fib(n), d)
     elif use == "mersenne":
         return powmod(2, n, d) - 1
     else:
         return self._fib_res(n, d)[0]