Каковы самые быстрые тесты на делимость? Скажем, с учетом архитектуры little-endian и 32-разрядного целого числа со знаком: как рассчитать очень быстро, что число делится на 2,3,4,5,... до 16?
ПРЕДУПРЕЖДЕНИЕ: данный код является ПРИМЕРОМ. Каждая линия независима! Простое решение, использующее модульную работу, медленное на многих процессорах, у которых нет оборудования DIV (как и у многих ARM). Некоторые компиляторы также не могут делать такие оптимизации (например, если divisor является аргументом функции или что-то зависит от него).
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