1: using System.Collections.Generic;
2: using Luschny.Math.MathUtils;
3:
4:
5: namespace Luschny.Math.Primes
6: {
7: /// <summary>
8: /// An interface for enumerating a prime number sieve.
9: ///
10: /// An IPrimeCollection is both IEnumerable<int>
11: /// and IDisposable as well as an IEnumerator<int>.
12: /// <blockquote><pre>
13: ///
14: /// To understand the difference between "SieveRange" and "PrimeRange"
15: /// better, let us consider the following example:
16: ///
17: /// If the SieveRange is 10..20, then the PrimeRange is 5..8,
18: /// because of the following table
19: ///
20: /// <- SieveRange ->
21: /// 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
22: /// x,1,2,x,3,x,4,x,x, x, 5, x, 6, x, x, x, 7, x, 8, x, x, x, 9
23: /// <- PrimeRange ->
24: ///
25: /// Thus the smallest prime in the SieveRange is the 5-th prime and
26: /// the largest prime in this SieveRange is the 8-th prime.
27: ///
28: /// </pre></blockquote>
29: ///
30: /// version cs-2004-09-03
31: /// author Peter Luschny
32: ///
33: /// </summary>
34: public interface IPrimeCollection : IEnumerator<int>, IEnumerable<int>
35: {
36: /// <summary>
37: /// Gets the number of primes in the enumeration.
38: /// </summary>
39: int NumberOfPrimes { get; }
40:
41: /// <summary>
42: /// Gets the intervall proceeded by the sieve.
43: /// </summary>
44: PositiveRange SieveRange { get; }
45:
46: /// <summary>
47: /// Gets the SieveRange of the indices of the prime numbers in the enumeration.
48: /// </summary>
49: PositiveRange PrimeRange { get; }
50:
51: /// <summary>
52: /// Returns the primes in the SieveRange under consideration
53: /// as an array.
54: /// </summary>
55: /// <returns>An array of the primes in the SieveRange.</returns>
56: int[] ToArray();
57:
58: /// <summary>
59: /// Writes the prime number enumeration (somewhat formatted)
60: /// to a file.
61: /// </summary>
62: /// <param name="fileName">The name of the file where the
63: /// enumeration is to be stored.</param>
64: /// <returns>Full path of the file written to.</returns>
65: string ToFile(string fileName);
66: }
67: }