Добавление к ответу Петра Александра
0) Конечно, m! = 0 && n! = 0 являются предварительными условиями ...
1) k
2) k == m: ответ всегда равен 1 (если n также не равно 1, см. 5).
3) к / м <п: Ответ к / м </p>
4) k <(m * n): ответ всегда k / m.
Это конкретное условие не очень способствует оптимизации, так как m * n
не будет использоваться повторно, и это не должно быть намного быстрее, чем по модулю
если m и / или n не являются степенями 2, в этом случае вам все равно лучше использовать
7. и / или 8. </p>
Для справки добавление Петра Александра:
5) m == 1: ответом будет просто k% n.
6) n == 1: ответ всегда равен 0.
7) m - это степень 2: например, если m равно 4, вы можете использовать (k >> 2)% n;
8) n - это степень 2: выражение становится (k / m) & (n - 1);