k = 23 #mod = 10**9 T = np.zeros(((k+1)*k,(k+1)*k)).astype(np.int64) init = np.zeros((k+1)*k).astype(np.int64) init[0] = 1 for d in xrange(10): for i in xrange((k+1)*k): s = i/k #sum m = i%k #mod-state m_new = ((10*m) + d) % k if s + d <= k: T[k*(s+d) + m_new,i] = 1 r1 = pe.matrix_mod_exp(n,T,init,2**9)[k*k] r2 = pe.matrix_mod_exp(n,T,init,5**9)[k*k] print "mod 2^9: " + str(r1) + " mod 5^9 " + str(r2)
def G(n): global T,init v = matrix_mod_exp(n-1,T,init,mod) return v[-1]
def FibboEval(n,x,mod): I = np.array([1,x,0],dtype=np.int64) A = np.array([[1,0,0],[x,x,x*x],[0,1,0]],dtype=np.int64) res = matrix_mod_exp(n-1,A,I,mod) return res[1]
from proj_euler import matrix_mod_exp,MillerRabin import numpy as np from CR_NEWTON_LAGRANGE import Lagrange_cr I = np.array([1,0],dtype=np.int64) T = np.array([[1,1],[1,0]],dtype=np.int64) start = 10**14 mod = 1234567891011 m1=1957137 m2=630803 if not m2*m1==mod: raise Exception("Incorrect modulus factorization.") res1=matrix_mod_exp(start,T,I,m1) res2=matrix_mod_exp(start,T,I,m2) prev = Lagrange_cr((int(res1[1]),int(res2[1])),(m1,m2)) curr = Lagrange_cr((int(res1[0]),int(res2[0])),(m1,m2)) n = 10**5 count = 0 i = start+1 s = 0 while count < n: if MillerRabin(i): s += curr if s > mod: s -= mod count += 1 curr,prev = curr+prev,curr