Cod sursa(job #2221591)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 14 iulie 2018 22:26:11
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <cstdio>
#define PRIM 1999999973

using namespace std;

long long int puteri[100];

int main()
{
    freopen("lgput.in", "r", stdin);
    freopen("lgput.out", "w", stdout);
    long long int a, b;
    scanf("%lld", &a);
    scanf("%lld", &b);
    long long int p = b;
    puteri[1] = a;
    int i = 1;
    while(p)
    {
        puteri[i + 1] = (puteri[i] * puteri[i]) % PRIM;
        p >>= 1;
        ++i;
    }
    long long int res = 1;
    for(long long int j = 0; 1 << j <= b; ++j)
    {
        if((1 << j) & b)
        {
            res *= puteri[j + 1];
            res %= PRIM;
        }
    }
    printf("%lld", res);
    return 0;
}