code: func genPrimitivePolynomial() []polynomial {
  	// drop Polynomial x，so the constant term must be 1
  	// so there are 2^(deg-1) Polynomials
  	cnt := 1 << (deg - 1)
  	var polynomials []polynomial
  	var p polynomial
  	p[0] = 1
  	p[deg] = 1
  	// gen all Polynomials
  	for i := 0; i < cnt; i++ {
  		p = genPolynomial(p, 1)
  		polynomials = append(polynomials, p)
  	}
  	// drop Polynomial x+1, so the cnt of Polynomials is odd
  	var psRaw []polynomial
  	for _, p := range polynomials {
  		var n int
  		for _, v := range p {
  			if v == 1 {
  				n++
  			}
  		}
  		if n&1 != 0 {
  			psRaw = append(psRaw, p)
  		}
  	}
  	// order of primitive element == 2^deg -1 ?
  	var ps []polynomial
  	for _, p := range psRaw {
  		lenTable := (1 << deg) - 1
  		table := genExpTable(p, lenTable)
  		var numOf1 int
  		for _, v := range table {
  			// cnt 1 in ExpTable
  			if int(v) == 1 {
  				numOf1++
  			}
  		}
  		if numOf1 == 1 {
  			ps = append(ps, p)
  		}
  	}
  	return ps
  }
docs: // generate primitive Polynomial