Я нахожу довольно странным, что операция x % 25
занимает так много времени (то есть, если вы используете встроенный оператор %
). Большинство современных процессоров должны делать это в одной инструкции. Я бы искал другие причины, по которым этот код занимает так много времени.
EDIT:
Вот алгоритм, который может хотя бы дать некоторые идеи:
256 = 6 (мод 25)
Это означает, что если мы напишем число x
в виде байтов x3 x2 x1 x0
, то получим x = 6^3*x3 + 6^2*x2 + 6*x1 + x0
(mod 25)
Это дает алгоритм для уменьшения размера x
:
int x0 = x & 0xFF, x1 = (x>>8) & 0xFF, x2 = (x>>16) & 0xFF, x3 = (x>>24) & 0xFF;
int y = x4;
y = (y << 2) + (y << 1) + x3;
y = (y << 2) + (y << 1) + x2;
y = (y << 2) + (y << 1) + x1;
y = (y << 2) + (y << 1) + x0;
(здесь (y << 2) + (y << 1) = 4*y + 2*y = 6*y
)
После этого y
будет иметь тот же остаток, что и x
mod 25.
Повторение этого 1, 2 или 3 раза сделает y
17, 11 или 9-битным числом, соответственно. Один из этих размеров может быть достаточно мал, чтобы составить справочную таблицу.
Я СЕРЬЕЗНО сомневаюсь, что это будет быстрее, чем встроенный оператор %
.