// set theory specific operators
        public static IntegerSet operator+(IntegerSet s1, IntegerSet s2)
        {
            IntegerSet s = (IntegerSet)s1.Clone();

            for (int i = 0; i < s2.elements.Length; i++)
            {
                s.Insert(s2.elements[i]);
            }

            return(s);
        }
        public static IntegerSet operator^(IntegerSet s1, IntegerSet s2)
        {
            IntegerSet s = new IntegerSet();

            for (int i = 0; i < s1.elements.Length; i++)
            {
                int n = s1.elements[i];
                if (s2.Contains(n))
                {
                    s.Insert(n);
                }
            }

            return(s);
        }