def isogeny_class_computation(E,p):
E = E.change_ring(QQbar).short_weierstrass_model()
F = E.division_polynomial(p).change_ring(QQ)
f = F.factor()
i=0
p=5
t=f[0][0].degree()
w=[R(1)]
while t < (p+1)/2:
for j in w:
if (j*f[i][0]).degree() < (p+1)/2 and (j*f[i][0]).divides(F):
w.append(j*f[i][0])
t = f[i+1][0].degree()
i+=1
v=[E]
for f in w:
try:
v.append(E.change_ring(QQ).isogeny(f).codomain())
except ValueError:
pass
v = [F.change_ring(QQ).global_minimal_model() for F in v]
return v