acb_dirichlet.h – Dirichlet L-functions, zeta functions, and related functions¶
Warning: the interfaces in this module are experimental and may change without notice.
This module will eventually allow working with Dirichlet L-functions and possibly slightly more general Dirichlet series. At the moment, it contains nothing interesting.
The code in other modules for computing the Riemann zeta function, Hurwitz zeta function and polylogarithm will possibly be migrated to this module in the future.
A Dirichlet L-function is the analytic continuation of an L-series
where \(\chi(k)\) is a Dirichlet character.
Dirichlet characters¶
-
acb_dirichlet_group_struct
¶
-
acb_dirichlet_group_t
¶ Represents the group of Dirichlet characters mod q.
An acb_dirichlet_group_t is defined as an array of acb_dirichlet_struct of length 1, permitting it to be passed by reference.
-
void
acb_dirichlet_group_init
(acb_dirichlet_group_t G, ulong q)¶ Initializes G to the group of Dirichlet characters mod q.
This method computes the prime factorization of q and other useful invariants. It does not automatically precompute lookup tables of discrete logarithms or numerical roots of unity, and can therefore safely be called even with large q. For implementation reasons, the largest prime factor of q must not exceed \(10^{12}\) (an abort will be raised). This restriction could be removed in the future.
-
void
acb_dirichlet_group_clear
(acb_dirichlet_group_t G)¶ Clears G.
-
void
acb_dirichlet_chi
(acb_t res, const acb_dirichlet_group_t G, ulong m, ulong n, slong prec)¶ Sets res to \(\chi_m(n)\), the value of the Dirichlet character of index m evaluated at the integer n.
Requires that m is a valid index, that is, \(1 \le m \le q\) and m is coprime to q. There are no restrictions on n.
Euler products¶
-
void
_acb_dirichlet_euler_product_real_ui
(arb_t res, ulong s, const signed char * chi, int mod, int reciprocal, slong prec)¶ Sets res to \(L(s,\chi)\) where \(\chi\) is a real Dirichlet character given by the explicit list chi of character values at 0, 1, ..., mod - 1. If reciprocal is set, computes \(1 / L(s,\chi)\) (this is faster if the reciprocal can be used directly).
This function uses the Euler product, and is only intended for use when s is large. An error bound is computed via
mag_hurwitz_zeta_uiui()
. Since\[\frac{1}{L(s,\chi)} = \prod_{p} \left(1 - \frac{\chi(p)}{p^s}\right) = \sum_{k=1}^{\infty} \frac{\mu(k)\chi(k)}{k^s}\]and the truncated product gives all smooth-index terms in the series, we have
\[\left|\prod_{p < N} \left(1 - \frac{\chi(p)}{p^s}\right) - \frac{1}{L(s,\chi)}\right| \le \sum_{k=N}^{\infty} \frac{1}{k^s} = \zeta(s,N).\]
Simple functions¶
-
void
acb_dirichlet_eta
(acb_t res, const acb_t s, slong prec)¶ Sets res to the Dirichlet eta function \(\eta(s) = \sum_{k=1}^{\infty} (-1)^k / k^s = (1-2^{1-s}) \zeta(s)\), also known as the alternating zeta function. Note that the alternating character \(\{1,-1\}\) is not itself a Dirichlet character.