// ~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);
            }
        }