def generate_primitive_root(n, q): for i in xrange(q): if Prime.is_prime(i): s = set() for j in range(q): s.add(i**j % q) if s == set(range(q)) - {0}: return i return None
def generate_primitive_root(n, q): if q == 2**64 - 2**32 + 1: return 7 not_approved = [] for i in xrange(q): if Prime.is_prime(i): s = set() for j in range(q): s.add(i**j % q) if s == set(range(q)) - {0}: return i return None
def generate_primitive_root(n,q): not_approved = [] r = None while r is None: k = generate_k(n,not_approved) for i in xrange(q): if Prime.is_prime(i): s = set() for j in range(q): s.add(i**j % q) if s == set(range(q))-{0}: r = i if r is None: # print "%d not approved" % k not_approved.append(k) return r,k
def get_a_proper_prime(N): # We need a special prime p of the form p = k*N + 1, for some integer k k = 1 while not Prime.is_prime(k * N + 1): k = k + 1 return k * N + 1
def generate_k(n,not_approved=[]): k = 1 while (not Prime.is_prime(k*n+1)) or (k in not_approved): k+=1 return k