back to table · edit · history · where entries came from · files · download
1644 bytes, as of the version from 2026-10-28 22:35 (current). Recorded here, not run.
"""Exclude unrecorded rational root components for numberdb.org/T592.
Run: sage -python rational_polynomial_check.py (adjacent generate.py).
For A(x)+sqrt(2)B(x), any rational root is a root of gcd(A,B).
A zero on the unit circle with t=z+1/z has Re(z)=t/2. For a
rational Im(z)=y, eliminate t from q(t)=0 and t^2=4(1-y^2).
This avoids expensive conversion of each nested algebraic radical to QQ.
"""
import generate as g
from sage.rings.rational_field import QQ
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
def candidates(poly):
Q=PolynomialRing(QQ,'u')
a=Q([c[0] for c in poly]);b=Q([c[1] for c in poly])
return a.gcd(b).roots(ring=QQ,multiplicities=False)
def run():
for m in range(2,7):
for n in range(m,7):
p=g.field_polynomial(m,n)
while p(-1)==0: p=p.quo_rem(g.z+1)[0]
h=p.degree()//2
T=PolynomialRing(g.F,'u');u=T.gen();C=[T(2),u]
for k in range(2,h+1): C.append(u*C[-1]-C[-2])
q=T(p[h])+sum((p[h+k]*C[k] for k in range(1,h+1)),T(0))
real_candidates=candidates(q)
s=4*(1-u*u)
even=sum((q[2*k]*s**k for k in range(h//2+1)),T(0))
odd=sum((q[2*k+1]*s**k for k in range((h+1)//2)),T(0))
imaginary_candidates=candidates(even*even-s*odd*odd)
assert not real_candidates and not imaginary_candidates,(m,n,real_candidates,imaginary_candidates)
print('PASS irrational nonreal-root components',m,n,flush=True)
print('Only rational components: Re=-1, Im=0 of the three exact roots -1.',flush=True)
if __name__=='__main__':run()