ponownie zaimplementować modulo za pomocą przesunięć bitowych?

Piszę jakiś kod dla bardzo ograniczonego systemu, w którym operator mod jest bardzo wolny. W moim kodzie modulo musi być użyte około 180 razy na sekundę i doszedłem do wniosku, że usunięcie go w jak największym stopniu znacznie zwiększyłoby prędkość mojego kodu, ponieważ obecnie jeden cykl mojego mainloopa nie działa w 1/60 drugi jak powinien. Zastanawiałem się, czy możliwe jest ponowne zaimplementowanie modulo, używając tylko przesunięć bitowych, które są możliwe przy mnożeniu i dzieleniu. Oto mój kod do tej pory w c ++ (jeśli mogę wykonać modulo używając złożenia, byłoby jeszcze lepiej). Jak mogę usunąć modulo bez dzielenia lub mnożenia?

    while(input > 0)
{
    out = (out << 3) + (out << 1);
    out += input % 10;

    input = (input >> 8) + (input >> 1);
}

EDYTOWAĆ: Właściwie zdałem sobie sprawę, że muszę to zrobić o ponad 180 razy na sekundę. Widząc, że wartość wejścia może być bardzo dużą liczbą do 40 cyfr.

questionAnswers(5)

yourAnswerToTheQuestion