Jypeli  9
The simple game programming library
PrimeNumberGenerator.cs
Siirry tämän tiedoston dokumentaatioon.
1 #region MIT License
2 /*
3  * Copyright (c) 2005-2008 Jonathan Mark Porter. http://physics2d.googlepages.com/
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9  * the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
17  * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  */
22 #endregion
23 
24 
25 
26 #if UseDouble
27 using Scalar = System.Double;
28 #else
29 using Scalar = System.Single;
30 #endif
31 using System;
32 using System.Collections.Generic;
33 
34 namespace AdvanceMath
35 {
36 
40  public sealed class PrimeNumberGenerator
41  {
42  int[] primes;
43  int maxNumber;
45  {
46  if (maxNumber < 2)
47  {
48  throw new ArgumentOutOfRangeException("maxNumber");
49  }
50  List<int> primes = new List<int>(Math.Max((int)Math.Sqrt(maxNumber), 10));
51  this.maxNumber = maxNumber;
52  for (int pos = 2; pos <= maxNumber; ++pos)
53  {
54  if (IsPrimeInternal(pos))
55  {
56  primes.Add(pos);
57  }
58  }
59  this.primes = primes.ToArray();
60  }
61  public int[] Primes
62  {
63  get { return primes; }
64  }
65  public int MaxNumber
66  {
67  get { return maxNumber; }
68  }
69  private bool IsPrimeInternal(int number)
70  {
71  int length = primes.Length;
72  for (int pos = 0; pos < length; ++pos)
73  {
74  if (number % primes[pos] == 0)
75  {
76  return false;
77  }
78  }
79  return true;
80  }
81  public bool IsPrime(int number)
82  {
83  if (number > maxNumber || number < 1)
84  {
85  throw new ArgumentOutOfRangeException("number");
86  }
87  return IsPrimeInternal(number);
88  }
89  }
90 }
AdvanceMath.PrimeNumberGenerator.primes
int[] primes
Definition: PrimeNumberGenerator.cs:42
AdvanceMath.PrimeNumberGenerator.MaxNumber
int MaxNumber
Definition: PrimeNumberGenerator.cs:66
AdvanceMath.PrimeNumberGenerator.PrimeNumberGenerator
PrimeNumberGenerator(int maxNumber)
Definition: PrimeNumberGenerator.cs:44
Scalar
System.Single Scalar
Definition: Clamped.cs:29
AdvanceMath.PrimeNumberGenerator.maxNumber
int maxNumber
Definition: PrimeNumberGenerator.cs:43
AdvanceMath.PrimeNumberGenerator.IsPrimeInternal
bool IsPrimeInternal(int number)
Definition: PrimeNumberGenerator.cs:69
System
Definition: CFFauxAttributes.cs:29
AdvanceMath.PrimeNumberGenerator.Primes
int[] Primes
Definition: PrimeNumberGenerator.cs:62
AdvanceMath.PrimeNumberGenerator
Generates prime numbers. Just felt like writting one.
Definition: PrimeNumberGenerator.cs:41
AdvanceMath.PrimeNumberGenerator.IsPrime
bool IsPrime(int number)
Definition: PrimeNumberGenerator.cs:81
AdvanceMath
Definition: Clamped.cs:36