/// <summary>
        /// Computes the Product of the prime numbers in the given sieveRange.
        /// </summary>
        /// <param name="range">The sieveRange of the enumeration.</param>
        /// <returns>The Product of the prime numbers in the enumeration.
        /// </returns>
        public XInt GetPrimorial(PositiveRange range)
        {
            int start, size;
            var pc = new PrimeCollection(this, range);

            if (pc.GetSliceParameters(out start, out size))
            {
                return(XInt.One);
            }

            return(XMath.Product(this.primes, start, size));
        }
        /// <summary>
        /// Computes the Product of the prime numbers in the given sieveRange
        /// primes[start]*primes[start+increment]*primes[start+2*increment]*...
        /// </summary>
        /// <param name="low">Lower bound of the sieveRange of the enumeration.</param>
        /// <param name="high">Higher bound of the sieveRange of the enumeration.</param>
        /// <returns>The Product of the prime numbers in the enumeration.</returns>
        public XInt GetPrimorial(int low, int high, int increment)
        {
            if (increment == 1)
            {
                return(this.GetPrimorial(new PositiveRange(low, high)));
            }

            var range = new PositiveRange(low, high);
            var pc = new PrimeCollection(this, range, increment);
            int start, size;

            if (pc.GetSliceParameters(out start, out size))
            {
                return(XInt.One);
            }

            return(XMath.Product(this.primes, start, size, increment));
        }