Cod sursa(job #2760456)

Utilizator mihnea_buzoiuMihnea Buzoiu mihnea_buzoiu Data 26 iunie 2021 15:30:29
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <stdio.h>

using namespace std;

const long long M = 1999999973; // 1073741824

long long modmult(long long x, long long y){
    return ((x % M) * (y % M)) % M;
}

long long putere(long long a, long long exp){ // (a^exp)%M
    long long m = 1;
    long long ai = a, afin = 1;

    for (int i=0; i<34; i++)
    {
        if (exp & m)
            afin = modmult(ai, afin);

        ai = modmult(ai, ai);
        m <<= 1;
    }

    return afin;
}

int main()
{
    freopen("lgput.in", "r", stdin);
    freopen("lgput.out", "w", stdout);

    long long n, p;
    scanf("%lld %lld", &n, &p);

    printf("%lld\n", putere(n, p));
}

// 2 4