La exponenciación modular falla para mod grande en C ++

Este es el código que estoy usando para calcular(n^p)%mod. Desafortunadamente, falla para grandes valores demod (en mi casomod = 10000000000ULL) cuando lo llamo desdemain() método. Alguna idea; ¿por qué?

ull powMod(ull n, ull p, ull mod) {
    ull ans = 1;
    n = n%mod;
    while(p) {
        if(p%2 == 1) {
            ans = (ans*n)%mod;
        }
        n = (n*n)%mod;
        p /= 2;
    }
    return ans;
}

Aquí,ull es un typedef paraunsigned long long.

Respuestas a la pregunta(4)

Su respuesta a la pregunta