// ~2.44 kCyc : rnd positive odd numbers // 0b 0??????? ???????? ???????? ???????1 public static bool IsPrime(Int32 value) { unchecked { if (64 > value) { if (2 > value) { return(false); } return(0 != (1 & (int)(prime_table >> (int)value))); } if (!IsProbablePrimeTrialDivision(primes_2_3_7, euler_2_3_7, (UInt32)value)) { return(false); } if (!IsProbablePrimeTrialDivision(primes_5_11, euler_5_11, (UInt32)value)) { return(false); } var d = (UInt32)value >> 1; int s = 1; while (0u == (1u & d)) { d >>= 1; ++s; } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(2, (UInt32)value, d, s)) { return(false); } /* // 2017Oct06 * if ((UInt32)value < 2047u) { * return true; * } * if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(3, (UInt32)value, d, s)) { * return false; * } * if ((UInt32)value < 1373653u) { * return true; * } * if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(5, (UInt32)value, d, s)) { * return false; * } * if ((UInt32)value < 25326001u) { * return true; * } */ if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(7, (UInt32)value, d, s)) { return(false); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(61, (UInt32)value, d, s)) { return(false); } return(true); } }
public static bool IsPrime(UInt64 value) { unchecked { if (64u > value) { if (2u > value) { return(false); } return(0 != (1 & (int)(prime_table >> (int)value))); } if (!IsProbablePrimeTrialDivision(primes_2_3_7, euler_2_3_7, value)) { return(false); } if (!IsProbablePrimeTrialDivision(primes_5_11, euler_5_11, value)) { return(false); } var d = (UInt64)value >> 1; int s = 1; while (0u == (1u & d)) { d >>= 1; ++s; } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(2, value, d, s)) { return(false); } if (value < 2047u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(3, value, d, s)) { return(false); } if (value < 1373653u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(5, value, d, s)) { return(false); } if (value < 25326001u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(7, value, d, s)) { return(false); } if (value < 3215031751u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(11, value, d, s)) { return(false); } if (value < 2152302898747u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(13, value, d, s)) { return(false); } if (value < 3474749660383u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(17, value, d, s)) { return(false); } if (value < 341550071728321u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(19, value, d, s)) { return(false); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(23, value, d, s)) { return(false); } if (value < 3825123056546413051u) { return(true); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(29, value, d, s)) { return(false); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(31, value, d, s)) { return(false); } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(37, value, d, s)) { return(false); } return(true); } }
public static bool IsPrime(UInt32 value) { unchecked { if (64u > value) { if (2u > value) { return(false); } return(0 != (1 & (int)(prime_table >> (int)value))); } if (!IsProbablePrimeTrialDivision(primes_2_3_7, euler_2_3_7, value)) { return(false); } if (!IsProbablePrimeTrialDivision(primes_5_11, euler_5_11, value)) { return(false); } /* * var d = value - 1; * var firstCoefficient = Utilities.CountTrailingZeros(d); * d >>= firstCoefficient; */ var d = value >> 1; int s = 1; while (0u == (1u & d)) { d >>= 1; ++s; } if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(2, value, d, s)) { return(false); } /* // 2017Oct06 * if (value < 2047u) { * return true; * } * if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(3, value, d, s)) { * return false; * } * if (value < 1373653u) { * return true; * } * if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(5, value, d, s)) { * return false; * } * if (value < 25326001u) { * return true; * } */ if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(7, value, d, s)) { return(false); } /* // 2017Oct06 * if (value < 3215031751u) { * return true; * } * if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(11, value, d, s)) { * return false; * } */ if (!IsPrimeMillerRabinModule.IsMillerRabinPseudoprimeInternal(61, value, d, s)) { return(false); } return(true); } }