sys.exit(1) base = int(sys.argv[1]) power = int(sys.argv[2]) delta = int(sys.argv[3]) if delta > base**power - 1: print 'Delta must be <=', base**power - 1 sys.exit(1) # Generate $GF(q^n)$ for $q=base $n$=power and find our root of unity GFqn = GFpoly(base, power) alpha = nth_root_of_unity(GFqn, base**power - 1) # Calculate the generator polynomial $G(x) = \prod_{i=1}^{\delta}{(x - \alpha^i)}$ Gpoly = Polynomial((GFqn(1), )) for b in range(1, delta): Gpoly *= Polynomial((-(alpha**b), GFqn(1))) codeword_len = base**power - 1 message_len = base**power - len(Gpoly) # Compute the codeword corresponding to the message [1, 2, ... message_len] message = Polynomial([GFqn(i + 1) for i in range(message_len)]) codeword = message * Gpoly print 'Alpha =', alpha.tonumber() print 'g(x) =', Gpoly print 'Message', message.asvector(), 'maps to', codeword.asvector() print 'message % g(x) =', message % Gpoly print 'codeword % g(x) =', codeword % Gpoly