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
Beispiel #2
0
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
Beispiel #4
0
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