infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Alexa Sergiu din Februarie 08, 2019, 13:10:52



Titlul: O metodă foarte ciudată de a calcula puterile lui 2 modulo 2 10^9+7
Scris de: Alexa Sergiu din Februarie 08, 2019, 13:10:52
Am găsit în rezolvarea unei probleme acest subprogram care calculează 2^n modulo 10^9+7.

Cod:
const unsigned long long mod = 1000000007;
unsigned long long mul (long long a, long long b)
{
    return (a * b) % mod;
};
unsigned long long pw (long base, long exponent)
{
    int result = 1;
    for (int bit=0;(1 << bit) <= exponent; bit++)
    {
        if (exponent & (1 << bit))
        {
            result = mul (result, base);
        }
        base = mul (base, base);
    }
    return result;
};

Îmi poate cineva explica, vă rog, când condiția
Cod:
exponent & (1 << bit)
se evaluează la un număr diferit de 0? Știu că & este conjuncție pe biți, dar asta nu mă lămurește.