code: func (l *lattice) decompose(k *big.Int) []*big.Int {
  	n := len(l.inverse)
  
  	// Calculate closest vector in lattice to <k,0,0,...> with Babai's rounding.
  	c := make([]*big.Int, n)
  	for i := 0; i < n; i++ {
  		c[i] = new(big.Int).Mul(k, l.inverse[i])
  		round(c[i], l.det)
  	}
  
  	// Transform vectors according to c and subtract <k,0,0,...>.
  	out := make([]*big.Int, n)
  	temp := new(big.Int)
  
  	for i := 0; i < n; i++ {
  		out[i] = new(big.Int)
  
  		for j := 0; j < n; j++ {
  			temp.Mul(c[j], l.vectors[j][i])
  			out[i].Add(out[i], temp)
  		}
  
  		out[i].Neg(out[i])
  		out[i].Add(out[i], l.vectors[0][i]).Add(out[i], l.vectors[0][i])
  	}
  	out[0].Add(out[0], k)
  
  	return out
  }
docs: // decompose takes a scalar mod Order as input and finds a short, positive decomposition of it wrt to the lattice basis.