Cod sursa(job #1984568)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 25 mai 2017 10:52:25
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.53 kb
#include <bits/stdc++.h>
#define TROLL 1999999973

using namespace std;

int exp_by_squaring(int n, int p)
{
    if(p==0)
        return 1;
    else if(p==1)
        return n;
    else if(n%2==0)
        return exp_by_squaring(n*n, p/2)%TROLL;
    else if(n%2==1)
        return n*exp_by_squaring(n*n, (p-1)/2)&TROLL;
}

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

    scanf("%d%d", &n, &p);
    printf("%d\n", exp_by_squaring(n, p));

    return 0;
}