1:   
   2:  namespace Luschny.Math.Primes
   3:  {
   4:      using Luschny.Math.MathUtils;
   5:   
   6:      /// <summary>
   7:      ///  The interface for a prime number sieve.
   8:      ///  Much of its functionality is given through PrimeCollections.
   9:      ///
  10:      /// @version cs-2004-09-02
  11:      /// @author Peter Luschny
  12:      /// </summary>
  13:      public interface IPrimeSieve
  14:      {
  15:          /// <summary>
  16:          /// Checks if a given number is prime.
  17:          /// </summary>
  18:          /// <param name="cand">The number the primality of which is
  19:          /// to be checked.</param>
  20:          /// <returns>True iff the given number is prime.</returns>
  21:          bool IsPrime(int cand);
  22:   
  23:          /// <summary>
  24:          /// Gets the n-th prime number.
  25:          /// </summary>
  26:          /// <param name="n">The index of the prime number.</param>
  27:          /// <returns>The n-th prime number.</returns>
  28:          int GetNthPrime(int n);
  29:   
  30:          /// <summary>
  31:          /// Returns the default PrimeCollection of the full sieve.
  32:          /// In other words: This PrimeCollection includes all
  33:          /// prime numbers p, such that 1 &lt;= p &lt;= high, where
  34:          /// high is the upper bound of the under laying sieve.
  35:          /// </summary>
  36:          /// <returns>The enumeration of the sieve.</returns>
  37:          IPrimeCollection GetPrimeCollection();
  38:   
  39:          /// <summary>
  40:          /// Gives the PrimeCollection of a subrange of the sieve.
  41:          /// It is the collection of all prime numbers p, 
  42:          /// such that low &lt;= p &lt;= high.
  43:          /// Note: If the range [low, high] is not included in the range 
  44:          /// of the sieve, this function might throw an ArgumentOutOfRangeException.
  45:          /// </summary>
  46:          /// <param name="low">The low limit of the enumaration interval.</param>
  47:          /// <param name="high">The high limit of the enumeration interval.</param>
  48:          /// <returns>The enumeration of the prime numbers between
  49:          /// low and high.</returns>
  50:          IPrimeCollection GetPrimeCollection(int low, int high);
  51:   
  52:          /// <summary>
  53:          /// Gives the PrimeCollection of a subrange of the sieve.
  54:          /// It is the collection of all prime numbers p,
  55:          /// such that 0 &lt; range.low &lt;= p &lt;= range.high.
  56:          /// Note: If the range is not included in the range of the sieve,
  57:          /// this function might throw an ArgumentOutOfRangeException.
  58:          /// </summary>
  59:          /// <param name="range">The range of the enumeration.</param>
  60:          /// <returns>The enumeration of the prime numbers in
  61:          /// the given range.</returns>
  62:          IPrimeCollection GetPrimeCollection(PositiveRange range);
  63:      }
  64:  }