Optimised Cython code for counting congruence solutions¶

sage.quadratic_forms.count_local_2.
CountAllLocalTypesNaive
(Q, p, k, m, zvec, nzvec)¶ This is an internal routine, which is called by
sage.quadratic_forms.quadratic_form.QuadraticForm.count_congruence_solutions_by_type QuadraticForm.count_congruence_solutions_by_type()
. See the documentation of that method for more details.INPUT:
 \(Q\) – quadratic form over \(\ZZ\)
 \(p\) – prime number > 0
 \(k\) – an integer > 0
 \(m\) – an integer (depending only on mod \(p^k\))
zvec
,nzvec
– a list of integers inrange(Q.dim())
, orNone
 OUTPUT:
 a list of six integers \(\ge 0\) representing the solution types:
[All, Good, Zero, Bad, BadI, BadII]
EXAMPLES:
sage: from sage.quadratic_forms.count_local_2 import CountAllLocalTypesNaive sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3]) sage: CountAllLocalTypesNaive(Q, 3, 1, 1, None, None) [6, 6, 0, 0, 0, 0] sage: CountAllLocalTypesNaive(Q, 3, 1, 2, None, None) [6, 6, 0, 0, 0, 0] sage: CountAllLocalTypesNaive(Q, 3, 1, 0, None, None) [15, 12, 1, 2, 0, 2]

sage.quadratic_forms.count_local_2.
count_modp__by_gauss_sum
(n, p, m, Qdet)¶ Returns the number of solutions of Q(x) = m over the finite field Z/pZ, where p is a prime number > 2 and Q is a nondegenerate quadratic form of dimension n >= 1 and has Gram determinant Qdet.
 REFERENCE:
 These are defined in Table 1 on p363 of Hanke’s “Local Densities…” paper.
INPUT:
 n – an integer >= 1
 p – a prime number > 2
 m – an integer
 Qdet – a integer which is nonzero mod p
 OUTPUT:
 an integer >= 0
EXAMPLES:
sage: from sage.quadratic_forms.count_local_2 import count_modp__by_gauss_sum sage: count_modp__by_gauss_sum(3, 3, 0, 1) ## for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3) 9 sage: count_modp__by_gauss_sum(3, 3, 1, 1) ## for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3) 6 sage: count_modp__by_gauss_sum(3, 3, 2, 1) ## for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3) 12 sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1]) sage: [Q.count_congruence_solutions(3, 1, m, None, None) == count_modp__by_gauss_sum(3, 3, m, 1) for m in range(3)] [True, True, True] sage: count_modp__by_gauss_sum(3, 3, 0, 2) ## for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3) 9 sage: count_modp__by_gauss_sum(3, 3, 1, 2) ## for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3) 12 sage: count_modp__by_gauss_sum(3, 3, 2, 2) ## for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3) 6 sage: Q = DiagonalQuadraticForm(ZZ, [1,1,2]) sage: [Q.count_congruence_solutions(3, 1, m, None, None) == count_modp__by_gauss_sum(3, 3, m, 2) for m in range(3)] [True, True, True]