Способы умножения по модулю с примитивными типами

Есть ли способ построить, например,(853467 * 21660421200929) % 100000000000007 без библиотек BigInteger (обратите внимание, что каждое число вписывается в 64-разрядное целое число, а результат умножения - нет)?

Это решение кажется неэффективным:

int64_t mulmod(int64_t a, int64_t b, int64_t m) {
    if (b < a)
        std::swap(a, b);
    int64_t res = 0;
    for (int64_t i = 0; i < a; i++) {
        res += b;
        res %= m;
    }
    return res;
}

Ответы на вопрос(7)

Ваш ответ на вопрос