добавлю еще немного про оптимизацию.
во первых постарайтесь избегать делений например a/5 лучше заменить на a*0.2, так как второй вариант раза в три быстрее.
если число нужно умножить на что то вроде 2, 4, 8, 16 и т.д. или тем более разделить то можно обойтись логическим сдвигом (который рулит
). например a/16 можно заменить на a shr 4, для умножения соответственно a shl 4. четверка это степень двойки для число 16.
дополнительное время отнимают вызовы функций , причем чем больше параметров чем больше времени они отнимают.
очень быстро выполняются логические операции (or, xor, and, not).
пока все.