Cod sursa(job #445502)

Utilizator om6gaLungu Adrian om6ga Data 23 aprilie 2010 23:19:21
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long long putere(int n,int p)
{
     /*if (p==0) return (long long)1;
     if (p==1) return (long long)n;
     if (p%2==0) return putere(n,p/2)*putere(n,p/2);
     else return putere(n,p/2)*putere(n,p/2)*n;*/
     
     
     long long r=1;
     long long nn=n;
     while (p>0) 
     {
        if (p%2==1) 
        {
            r*=nn;
            r%=1999999973;
            p-=1;
        }
        nn*=nn;
        nn%=1999999973;
        p/=2;
    }
    r%=1999999973;
    return r;
}


int main()
{
    FILE *in=fopen("lgput.in","r");
    FILE *out=fopen("lgput.out","w");   
    int n,p;
    //long long t=1999999973;
    fscanf(in,"%d %d",&n,&p);
    fprintf(out,"%lld",putere(n,p)); 
    fclose(in); fclose(out);
    return 0;
}