for q in range(200): q = Integer(q) if q < 2: continue if not q.is_prime_power(): continue if q % 4 != 3: continue Fq. = GF(q) def chi(a): return a^((q-1)//2) for s in Fq: if s == 0: continue if (s^2-2)*(s^2+2) == 0: continue c = 2/s^2 r = c+1/c d = -(c+1)^2/(c-1)^2 def phi(t): if t == 1: return (Fq(0),Fq(1)) if t == -1: return (Fq(0),Fq(1)) u = (1-t)/(1+t) v = u^5 + (r^2-2)*u^3 + u X = chi(v)*u Y = (chi(v)*v)^((q+1)//4)*chi(v)*chi(u^2+1/c^2) x = (c-1)*s*X*(1+X)/Y y = (r*X-(1+X)^2)/(r*X+(1+X)^2) return (x,y) phigraph = [(t,phi(t)) for t in Fq] for (t,p) in phigraph: preimages = [r2 for (r2,p2) in phigraph if p2 == p] if t == 0: print preimages == [0] else: print preimages == [t,-t] or preimages == [-t,t] images = set() for x in Fq: for y in Fq: if x^2+y^2==1+d*x^2*y^2: if y + 1 == 0: continue eta = (y-1)/(2*(y+1)) if not ((1+eta*r)^2-1).is_square(): continue if eta*r == -2 and x != 2*s*(c-1)*chi(c)/r: continue images.add((x,y)) phiFq = set() for t in Fq: phiFq.add(phi(t)) print phiFq == images for x,y in phiFq: print y+1 != 0 eta = (y-1)/(2*(y+1)) X = -(1+eta*r)+((1+eta*r)^2-1)^((q+1)//4) z = chi((c-1)*s*X*(1+X)*x*(X^2+1/c^2)) u = z*X print 1+u != 0 t = (1-u)/(1+u) print phi(t) == (x,y)