Cod sursa(job #1117851)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 23 februarie 2014 20:38:57
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.62 kb
#include <stdio.h>

#define modP 1999999973

typedef unsigned long long uint64;

uint64 pwr( uint64 N, uint64 P ) {
    if( P == 0 ) {
        return 1;
    } else {
        uint64 partial = pwr( N, P / 2 );
        partial *= partial;
        partial %= modP;
        if( P & 1 ) {
            partial *= N;
            partial %= modP;
        }
        return partial;
    }
}

int main( ) {
    FILE * fin, * fout;
    fin = fopen( "lgput.in", "r" );
    fout = fopen( "lgput.out", "w" );

    uint64 N, P;
    fscanf( fin, "%lld%lld", &N, &P );
    fprintf( fout, "%lld\n", pwr( N, P ) );

    fclose( fin );
    fclose( fout );
}