def exponent(p,power,E):
Ep = E.reduction(p)
exp = Ep.abelian_group().generator_orders()[0]
return exp*p^(power-1)
def is_strong_elliptic_Carmichael_number(E,N):
if gcd(E.discriminant(),N) > 1:
return false
factorization = list(factor(N))
if len(factorization) <= 1: return false
cond = E.conductor()
aN = 1
prime_coefficients = {}
for prime, power in factorization:
listy = [1, prime+1-E.Np(prime)]
char = 1
if mod(cond,prime) == 0:
char = 0
for j in range(2,power+1):
listy.append(listy[1]*listy[j-1]-char*prime*listy[j-2])
aN = aN*listy[-1]
prime_coefficients[prime] = listy[1]
t = N+1-aN
while mod(t,2) != 1:
t/=2
for prime, power in factorization:
exp = exponent(prime,power,E)
if mod(t, exp) != 0:
return false
return true
A,B = 0,80
E = EllipticCurve([A,B])
count = 1
N = 1
while true:
if is_strong_elliptic_Carmichael_number(E,N):
print count,N
count+=1
N+=1