// powersOfTwoDecompose finds q and k with x = q * 1<<k and q is odd, or q and k are 0.
powersOfTwoDecompose finds q and k with x = q * 1<<k and q is odd, or q and k are 0.
// powersOfTwoDecompose finds q and k with x = q * 1<<k and q is odd or q and k are 0 .
func (x nat) powersOfTwoDecompose() (q nat, k int) {
	if len(x) == 0 {
		return x, 0
	}
	i := 0
	for x[i] == 0 {
		i++
	}
	n := trailingZeroBits(x[i]) 
	q = make(nat, len(x)-i)
	shrVU(q, x[i:], uint(n))
	q = q.norm()
	k = i*_W + n
	return
}
func ( x nat ) powersOfTwoDecompose ( ) ( q nat , k int ) { if len ( x ) == 0 { return x , 0 } i := 0 for x [ i ] == 0 { i ++ } n := trailingZeroBits ( x [ i ] ) q = make ( nat , len ( x ) - i ) shrVU ( q , x [ i : ] , uint ( n ) ) q = q . norm ( ) k = i * _W + n return }
powersOfTwoDecompose finds q and k with x = q * 1<<k and q is odd, or q and k are 0.
powersOfTwoDecompose finds q and k with x = q * 1<<k and q is odd or q and k are 0 .
// One of the words must be non-zero by definition, // so this loop will terminate with i < len(x), and // i is the number of 0 words. // x[i] != 0