예제 #1
0
    def kloosterman_sum(self, arg):
        a, b = map(int, arg.split(','))
        modulus, number = self.modulus, self.number
        if modulus == 1:
            # there is a bug in sage for modulus = 1
            return r"""
            \( \displaystyle K(%s,%s,\chi_{1}(1,·))
            = \sum_{r \in \Z/\Z}
                 \chi_{1}(1,r) 1^{%s r + %s r^{-1}}
            = 1 \)
            """ % (a, b, a, b)

        chi_values_data = db.char_dir_values.lookup(
            "{}.{}".format(modulus, number)
        )
        chi_valuepairs = chi_values_data['values_gens']
        chi_genvalues = [int(v) for g, v in chi_valuepairs]
        chi = self.chi.sage_character(self.order, chi_genvalues)

        k = chi.kloosterman_sum_numerical(100, a, b)
        k = complex2str(k, 10)
        return r"""
        \( \displaystyle K(%s,%s,\chi_{%s}(%s,·))
        = \sum_{r \in \Z/%s\Z}
             \chi_{%s}(%s,r) e\left(\frac{%s r + %s r^{-1}}{%s}\right)
        = %s \)""" % (a, b, modulus, number, modulus, modulus, number, a, b, modulus, k)
예제 #2
0
 def gauss_sum(self, val):
     val = int(val)
     mod, num = self.modulus, self.number
     g = self.chi.gauss_sum_numerical(val)
     g = complex2str(g)
     x = Rational('%s/%s' % (val, mod))
     n = x.numerator()
     n = str(n) + "r" if not n == 1 else "r"
     d = x.denominator()
     Gtex = r'\Z/%s\Z' % mod
     chitex = self.char2tex(mod, num, tag=False)
     chitexr = self.char2tex(mod, num, 'r', tag=False)
     deftex = r'\sum_{r\in %s} %s e\left(\frac{%s}{%s}\right)'%(Gtex,chitexr,n,d)
     return r"\(\displaystyle \tau_{%s}(%s) = %s = %s \)" % (val, chitex, deftex, g)
예제 #3
0
 def gauss_sum(self, val):
     val = int(val)
     mod, num = self.modulus, self.number
     chi = self.chi.sage_character()
     g = chi.gauss_sum_numerical(100, val)
     g = complex2str(g)
     from sage.rings.rational import Rational
     x = Rational('%s/%s' % (val, mod))
     n = x.numerator()
     n = str(n) + "r" if not n == 1 else "r"
     d = x.denominator()
     Gtex = '\Z/%s\Z' % mod
     chitex = self.char2tex(mod, num, tag=False)
     chitexr = self.char2tex(mod, num, 'r', tag=False)
     deftex = r'\sum_{r\in %s} %s e\left(\frac{%s}{%s}\right)'%(Gtex,chitexr,n,d)
     return r"\(\displaystyle \tau_{%s}(%s) = %s = %s. \)" % (val, chitex, deftex, g)
예제 #4
0
 def kloosterman_sum(self, arg):
     a, b = map(int, arg.split(','))
     modulus, number = self.modulus, self.number
     if modulus == 1:
         # there is a bug in sage for modulus = 1
         return r"""
         \( \displaystyle K(%s,%s,\chi_{1}(1,·))
         = \sum_{r \in \Z/\Z}
              \chi_{1}(1,r) 1^{%s r + %s r^{-1}}
         = 1 \)
         """ % (a, b, a, b)
     chi = self.chi.sage_character()
     k = chi.kloosterman_sum_numerical(100, a, b)
     k = complex2str(k, 10)
     return r"""
     \( \displaystyle K(%s,%s,\chi_{%s}(%s,·))
     = \sum_{r \in \Z/%s\Z}
          \chi_{%s}(%s,r) e\left(\frac{%s r + %s r^{-1}}{%s}\right)
     = %s. \)""" % (a, b, modulus, number, modulus, modulus, number, a, b, modulus, k)