Exemplo n.º 1
0
 def nextprimchar(m, n):
     if m < 3:
         return 3, 2
     while 1:
         n += 1
         if n >= m:
             m, n = m + 1, 2
         if gcd(m, n) != 1:
             continue
         # we have a character, test if it is primitive
         chi = ConreyCharacter(m,n)
         if chi.is_primitive():
             return m, n
Exemplo n.º 2
0
 def prevprimchar(m, n):
     if m <= 3:
         return 1, 1
     while True:
         n -= 1
         if n <= 1:  # (m,1) is never primitive for m>1
             m, n = m - 1, m - 1
         if m <= 2:
             return 1, 1
         if gcd(m, n) != 1:
             continue
         # we have a character, test if it is primitive
         chi = ConreyCharacter(m,n)
         if chi.is_primitive():
             return m, n
Exemplo n.º 3
0
def get_character_modulus(a, b, limit=7):
    """ this function is also used by lfunctions/LfunctionPlot.py """
    headers = list(range(1, limit))
    headers.append("more")
    entries = {}
    rows = list(range(a, b + 1))
    for row in rows:
        if row != 1:
            G = Integers(row).list_of_elements_of_multiplicative_group()
        else:
            G = [1]
        for chi_n in G:
            chi = ConreyCharacter(row, chi_n)
            multorder = chi.multiplicative_order()
            if multorder <= limit:
                el = chi
                col = multorder
                entry = entries.get((row, col), [])
                entry.append(el)
                entries[(row, col)] = entry
    entries2 = {}
    out = lambda chi: (chi.number, chi.is_primitive(),
                       chi.multiplicative_order(), chi.is_even())
    for k, v in entries.items():
        l = []
        v = sorted(v, key=lambda x: x.number)
        while v:
            e1 = v.pop(0)
            e1_num = e1.number
            inv_num = 1 if e1_num == 1 else e1_num.inverse_mod(e1.modulus)

            inv = ConreyCharacter(e1.modulus, inv_num)

            if e1_num == inv_num:
                l.append((out(e1), ))
            else:
                l.append((out(e1), out(inv)))
                v = [
                    x for x in v
                    if (x.modulus, x.number) != (inv.modulus, inv.number)
                ]
        if k[1] == "more":
            l = sorted(l, key=lambda e: e[0][2])
        entries2[k] = l
    cols = headers
    return headers, entries2, rows, cols