load algorithm2.sage load Schirokauer.sage def fast_is_p_rational(f,p): classOK = false unitOK = false epss = fast_units(f) for eps in epss: d = f.factor_mod(p)[0][0].degree() E = p^d - 1 if Schirokauer(eps,p,E,p) != [0,0]: print f,eps unitOK = true break K.=NumberField(f) if not K.class_number() % p == 0: classOK = true return (classOK and unitOK)