Esempio n. 1
0
 internal static bool DivisibleBySomeLowPrime(Digits digits, int n)
 {
     if (n == 0 || (digits[0] & 1) == 0)
     {
         Debug.Assert(false, "untested code");
         return(true);
     }
     for (int l = 0; l != LowPrimesProduct.Length; l++)
     {
         Digit product    = LowPrimesProduct[l]
         , productInverse = Digit.TwoAdicInverse(product)
         , r = 0;
         for (int i = 0; i != n; i++)
         {
             Digit mulby;
             unchecked {
                 r += digits[i];
                 if (r < digits[i])
                 {
                     r -= product;
                 }
                 mulby = productInverse * r;
                 Debug.Assert(mulby * product == r, "internal error");
             }
             r = product - Digit2.Hi((UInt64)mulby * product);
         }
         if (Digit.OddGcd(r, product) != 1)
         {
             return(true);
         }
     }
     return(false);
 }