Какие тесты на делимость самые быстрые? Скажем, для архитектуры с прямым порядком байтов и 32-битного целого числа со знаком: как очень быстро вычислить, что число делится на 2, 3, 4, 5, ... до 16?
ПРЕДУПРЕЖДЕНИЕ: данный код является Только ПРИМЕР. Каждая линия независима! Просто очевидное решение, использующее операцию по модулю, работает медленно на многих процессорах, у которых нет оборудования DIV (например, многих ARM). Некоторые компиляторы также не могут производить такую оптимизацию (скажем, если делитель является аргументом функции или от чего-то зависит).
Divisible_by_1 = do();
Divisible_by_2 = if (!(number & 1)) do();
Divisible_by_3 = ?
Divisible_by_4 = ?
Divisible_by_5 = ?
Divisible_by_6 = ?
Divisible_by_7 = ?
Divisible_by_8 = ?
Divisible_by_9 = ?
Divisible_by_10 = ?
Divisible_by_11 = ?
Divisible_by_12 = ?
Divisible_by_13 = ?
Divisible_by_14 = ?
Divisible_by_15 = ?
Divisible_by_16 = if(!number & 0x0000000F) do();
и особые случаи:
Divisible_by_2k = if(number & (tk-1)) do(); //tk=2**k=(2*2*2*...) k times