Fast divisibility tests (by 2,3,4,5,.., 16)?

后端 未结 16 2148
轻奢々
轻奢々 2020-12-05 00:14

What are the fastest divisibility tests? Say, given a little-endian architecture and a 32-bit signed integer: how to calculate very fast that a number is divisible by 2,3,4,

16条回答
  •  一整个雨季
    2020-12-05 00:55

    Here are some tips I haven't see anyone else suggest yet:

    One idea is to use a switch statement, or precompute some array. Then, any decent optimizer can simply index each case directly. For example:

    // tests for (2,3,4,5,6,7)
    switch (n % 8)
    {
    case 0: break;
    case 1: break;
    case 2: do(2); break;
    case 3: do(3); break;
    case 4: do(2); do(4) break;
    case 5: do(5); break;
    case 6: do(2); do(3); do(4); break;
    case 7: do(7); break;
    } 
    

    Your application is a bit ambiguous, but you may only need to check prime numbers less than n=16. This is because all numbers are factors of the current or previous prime numbers. So for n=16, you might be able to get away with only checking 2, 3, 5, 7, 11, 13 somehow. Just a thought.

提交回复
热议问题