Cod sursa(job #1479364)

Utilizator pitbull007Hurmuzache Ciprian pitbull007 Data 31 august 2015 10:24:49
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#include <stdlib.h>
const int N = 1999999973;
/**
    This function computes n^p in logarithmic time
**/
long long int exponent(long long int n, long long int p) {
    if( p < 0 ) {
        return exponent( 1/n , -p );
    }
    if( p == 0) {
        return 1;
    } else if( p == 1 ) {
        return n;
    } else if( p % 2 == 0 ) {    //p is even
        return exponent( n*n , p/2 );
    } else {
        return n * exponent( n*n , (p-1)/2 );
    }
}


int main(void) {
    FILE *fin,*fout;
    int n,p;

    fin=fopen("lgput.in","r");
    fout=fopen("lgput.out","w");

    fscanf(fin,"%d",&n);
    fscanf(fin,"%d",&p);

    long long int rez = exponent(n,p);
    fprintf(fout,"%lld",rez%N);
    return 0;
}