2003-04-22 Sebastien Pouliot <spouliot@videotron.ca>
[mono.git] / mcs / class / corlib / Mono.Math.Prime.Generator / PrimeGeneratorBase.cs
1 //
2 // Mono.Math.Prime.Generator.PrimeGeneratorBase.cs - Abstract Prime Generator
3 //
4 // Authors:
5 //      Ben Maurer
6 //
7 // Copyright (c) 2003 Ben Maurer. All rights reserved
8 //
9
10 using System;
11
12 namespace Mono.Math.Prime.Generator {
13
14         [CLSCompliant(false)]
15         public abstract class PrimeGeneratorBase {
16
17                 public virtual ConfidenceFactor Confidence {
18                         get {
19 #if DEBUG
20                                 return ConfidenceFactor.ExtraLow;
21 #else
22                                 return ConfidenceFactor.Medium;
23 #endif
24                         }
25                 }
26
27                 public virtual Prime.PrimalityTest PrimalityTest {
28                         get {
29                                 return new Prime.PrimalityTest (PrimalityTests.SmallPrimeSppTest);
30                         }
31                 }
32
33                 public virtual int TrialDivisionBounds {
34                         get { return 4000; }
35                 }
36
37                 /// <summary>
38                 /// Performs primality tests on bi, assumes trial division has been done.
39                 /// </summary>
40                 /// <param name="bi">A BigInteger that has been subjected to and passed trial division</param>
41                 /// <returns>False if bi is composite, true if it may be prime.</returns>
42                 /// <remarks>The speed of this method is dependent on Confidence</remarks>
43                 protected bool PostTrialDivisionTests (BigInteger bi)
44                 {
45                         return PrimalityTest (bi, this.Confidence);
46                 }
47
48                 public abstract BigInteger GenerateNewPrime (int bits);
49         }
50 }