public Varset Subtract(Varset varset) { Varset cp = new Varset(varset); if (cp.item.Length < item.Length) { AlignLength(cp); } Varset one = new Varset(1); one.Set(0, true); cp = cp.Not(); cp = cp.StaticAdd(one); cp = cp.StaticAdd(this); return cp; }
public Varset NextPermutation() { Varset vs = new Varset(this); Varset one = new Varset(0); one.Set(0, true); Varset tmp = vs.Or(vs.Subtract(one)).StaticAdd(one); Varset nextVariables = tmp.Or(tmp.And(tmp.Not().StaticAdd(one)).Divide(vs.And(vs.Not().StaticAdd(one))).RightShift(1).Subtract(one)); return nextVariables; }