# Optimized counting of 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 in range(Q.dim()), or None

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: 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]


Return the number of solutions of $$Q(x) = m$$ over the finite field $$\ZZ/p\ZZ$$, where $$p$$ is a prime number > 2 and $$Q$$ is a non-degenerate quadratic form of dimension $$n \geq 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 $$\geq 1$$

• p – a prime number > 2

• m – an integer

• Qdet – a integer which is non-zero mod $$p$$

OUTPUT: an integer $$\geq 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.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