Take a cyclic group Z_n
with the order n
. The elements are:
Z_n = {1,2,...,n-1}
For each of the elements, let us call them a
, you test if a^x % n
gives us all numbers in Z_n
; x
is here all numbers from 1
to n-1
. If the element does generator our entire group, it is a generator.
I need a program that gets the order of the group and gives back all the generators. Here is what I tried:
import math
active = True
def test(a,b):
a.sort()
b.sort()
return a == b
while active:
order = input("Order of the cyclic group: ")
print
group = []
for i in range(1, order):
group.append(i)
res = []
for x in group:
foo = []
foo.append(x)
for y in group:
foo.append((x**y) % order)
if(test(group,foo)):
res.append(res,foo,axis=0)
print res
Sadly, it gives back an empty list.
One change you can make is to use sets instead of lists to store the results, which makes comparing them easier.
Prints