Algoritmo C / C ++: A maneira mais rápida de calcular (2 ^ n)% d com um n e d números inteiros de 32 ou 64 bits

Estou procurando um algoritmo que permita calcular(2^n)%d com ed 32 ou 64 bits inteiros.

O problema é que é impossível armazenar2^n na memória, mesmo com bibliotecas de multiprecisão, mas talvez exista um truque para calcular(2^n)%d apenas usando números inteiros de 32 ou 64 bit

Muito obrigado