Helper code for ternary quadratic forms#
- sage.quadratic_forms.ternary.evaluate(a, b, c, r, s, t, v)#
Function to evaluate the ternary quadratic form \((a, b, c, r, s, t)\) in a 3-tuple \(v\).
EXAMPLES:
sage: from sage.quadratic_forms.ternary import evaluate sage: Q = TernaryQF([1, 2, 3, -1, 0, 0]) sage: v = (1, -1, 19) sage: Q(v) 1105 sage: evaluate(1, 2, 3, -1, 0, 0, v) 1105
- sage.quadratic_forms.ternary.extend(v)#
Return the coefficients of a matrix \(M\) such that \(M\) has determinant gcd(\(v\)) and the first column is \(v\).
EXAMPLES:
sage: from sage.quadratic_forms.ternary import extend sage: v = (6, 4, 12) sage: m = extend(v) sage: M = matrix(3, m); M [ 6 1 0] [ 4 1 0] [12 0 1] sage: M.det() 2 sage: v = (-12, 20, 30) sage: m = extend(v) sage: M = matrix(3, m) sage: M [-12 1 0] [ 20 -2 1] [ 30 0 -7] sage: M.det() 2
- sage.quadratic_forms.ternary.primitivize(v0, v1, v2, p)#
Given a 3-tuple \(v\) not singular mod \(p\), return a primitive 3-tuple version of \(v\) mod \(p\).
EXAMPLES:
sage: from sage.quadratic_forms.ternary import primitivize sage: primitivize(12, 13, 14, 5) (3, 2, 1) sage: primitivize(12, 13, 15, 5) (4, 1, 0)
- sage.quadratic_forms.ternary.pseudorandom_primitive_zero_mod_p(a, b, c, r, s, t, p)#
Find a zero of the form \((a, b, 1)\) of the ternary quadratic form given by the coefficients \((a, b, c, r, s, t)\) mod \(p\), where \(p\) is a odd prime that doesn’t divide the discriminant.
EXAMPLES:
sage: Q = TernaryQF([1, 2, 2, -1, 0, 0]) sage: p = 1009 sage: from sage.quadratic_forms.ternary import pseudorandom_primitive_zero_mod_p sage: v = pseudorandom_primitive_zero_mod_p(1, 2, 2, -1, 0, 0, p) # needs sage.libs.pari sage: v[2] # needs sage.libs.pari 1 sage: Q(v)%p # needs sage.libs.pari 0
- sage.quadratic_forms.ternary.red_mfact(a, b)#
Auxiliary function for reduction that finds the reduction factor of integers \(a\), \(b\).
INPUT:
a
,b
– integers
OUTPUT: Integer
EXAMPLES:
sage: from sage.quadratic_forms.ternary import red_mfact sage: red_mfact(0, 3) 0 sage: red_mfact(-5, 100) 9