internal static void Main(string[] args)
		{
			// Known problem -> these two pseudoprimes passes my implementation of
			// primality test but failed in JDK's isProbablePrime test.

			byte[] pseudoPrime1 = {
			                        0x00,
			                        0x85, 0x84, 0x64, 0xFD, 0x70, 0x6A,
			                        0x9F, 0xF0, 0x94, 0x0C, 0x3E, 0x2C,
			                        0x74, 0x34, 0x05, 0xC9, 0x55, 0xB3,
			                        0x85, 0x32, 0x98, 0x71, 0xF9, 0x41,
			                        0x21, 0x5F, 0x02, 0x9E, 0xEA, 0x56,
			                        0x8D, 0x8C, 0x44, 0xCC, 0xEE, 0xEE,
			                        0x3D, 0x2C, 0x9D, 0x2C, 0x12, 0x41,
			                        0x1E, 0xF1, 0xC5, 0x32, 0xC3, 0xAA,
			                        0x31, 0x4A, 0x52, 0xD8, 0xE8, 0xAF,
			                        0x42, 0xF4, 0x72, 0xA1, 0x2A, 0x0D,
			                        0x97, 0xB1, 0x31, 0xB3,
			                      };

			//byte[] pseudoPrime2 = {
			//                        0x00,
			//                        0x99, 0x98, 0xCA, 0xB8, 0x5E, 0xD7,
			//                        0xE5, 0xDC, 0x28, 0x5C, 0x6F, 0x0E,
			//                        0x15, 0x09, 0x59, 0x6E, 0x84, 0xF3,
			//                        0x81, 0xCD, 0xDE, 0x42, 0xDC, 0x93,
			//                        0xC2, 0x7A, 0x62, 0xAC, 0x6C, 0xAF,
			//                        0xDE, 0x74, 0xE3, 0xCB, 0x60, 0x20,
			//                        0x38, 0x9C, 0x21, 0xC3, 0xDC, 0xC8,
			//                        0xA2, 0x4D, 0xC6, 0x2A, 0x35, 0x7F,
			//                        0xF3, 0xA9, 0xE8, 0x1D, 0x7B, 0x2C,
			//                        0x78, 0xFA, 0xB8, 0x02, 0x55, 0x80,
			//                        0x9B, 0xC2, 0xA5, 0xCB,
			//                      };

			Console.WriteLine("List of primes < 2000\n---------------------");
			int limit = 100, count = 0;
			for (int i = 0; i < 2000; i++)
			{
				if (i >= limit)
				{
					Console.WriteLine();
					limit += 100;
				}

				BigInteger p = new BigInteger(-i);

				if (p.IsProbablePrime())
				{
					Console.Write(i + ", ");
					count++;
				}
			}
			Console.WriteLine("\nCount = " + count);

			BigInteger operand = new BigInteger(pseudoPrime1);
			Console.WriteLine("\n\nPrimality testing for\n" + operand + "\n");
			Console.WriteLine("SolovayStrassenTest(5) = " + operand.SolovayStrassenTest(5));
			Console.WriteLine("RabinMillerTest(5) = " + operand.RabinMillerTest(5));
			Console.WriteLine("FermatLittleTest(5) = " + operand.FermatLittleTest(5));
			Console.WriteLine("isProbablePrime() = " + operand.IsProbablePrime());

			Console.Write("\nGenerating 512-bits random pseudoprime. . .");
			Random rand = new Random();
			BigInteger prime = GeneratePseudoPrime(512, 5, rand);
			Console.WriteLine("\n" + prime);

			//int dwStart = System.Environment.TickCount;
			//BigInteger.MulDivTest(100000);
			//BigInteger.RSATest(10);
			//BigInteger.RSATest2(10);
			//Console.WriteLine(System.Environment.TickCount - dwStart);
		}