#Square and Multiply (x,k,*,e)
-def sqmult(x,k,func,e):
+def sqmult(x,k,func=lambda x,y:x*y,e=1):
y = e;
while k:
if(k%2):
#Square and Multiply (x,k,*,e) mit TeX Ausgabe
def sqmult_tex(x,k,func,e):
- y = e;
+ y = e
print "\\begin{array}{cccc}"
print " x & y & k & k \\mod 2\\\\\\hline"
print " ", x, "&" , y , "&" , k, "&" , k%2, "\\\\"
print " ", x, "&" , y , "&" , k, "&" , k%2, "\\\\"
print "\\end{array}"
return y
+
+def fermat(n)
+ return 2**(2**n)+1
+
+def pepin(n)
+ return sqmult(3,(2**(2**n))/2,lambda x,y:(x*y)%(2**(2**n)+1),1) == 2**(2**n)
+
+def lucl(p)
+ s = 4
+ if !isprime(p):
+ return 0
+ for i in range(1,p-2):
+ s = s*s-2 mod 2**(p-1)
+ return s==0
+
+def polrho(n,x=3,y=3,e=2,a=1)
+ c = 0
+ while :
+ c =c+1
+ x = sqmult(x,e,lambda x,y:x*y mod n) +a
+ y = sqmult(y,e,lambda x,y:x*y mod n) +a
+ y = sqmult(y,e,lambda x,y:x*y mod n) +a
+ if gcd(x-y,n)>1:
+ return gcd(y-y,n),c
+
+
\ No newline at end of file