Cod sursa(job #796917)

Utilizator razvan.popaPopa Razvan razvan.popa Data 12 octombrie 2012 22:39:24
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <string>
#include <math.h>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>

#define infile "lgput.in"
#define outfile "lgput.out"

#define n_max
#define INF 1 << 30
#define MOD 1999999973

#define ll long long
#define ull unsigned long long

#define pb push_back
#define mkp make_pair
#define pii pair<int, int>
#define FOR(g) \
    for(vector<int>::iterator it=g.begin(); it!=g.end(); ++it)
#define nxt (*it)

#define min(x,y) x<y ? x : y
#define max(x,y) x>y ? x : y
using namespace std;

ull N, P;


void read(){
    ifstream fin(infile);

    fin >> N >> P;

    fin.close();
}

ull powlog(ull N, ull P){
    if(P == 1)
       return N % MOD;

    ull res = powlog(N, P/2);
    res = (res * res) % MOD;

    if(P&1)
       res = (res * N) % MOD;

    return res;
}

void print(){
    ofstream fout(outfile);

    fout << powlog(N, P);

    fout.close();
}


int main(){

    read();

    print();

    return 0;
}