Cod sursa(job #1005589)

Utilizator toncuvasileToncu Vasile toncuvasile Data 5 octombrie 2013 12:27:29
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include<fstream>
using namespace std;

int m=1999999973;
//int m=5;

/* int power(int N, int P){
    if(P==0) return 1;
    if(P==1) return N;
    long long aux=power(N,P/2);
    aux=(aux*aux)%M;
    if(P%2==1) aux=(aux*N)%M;
    return int(aux);

}


int power(int x,int n){
    if(n==0) return 1;
    if(n==1) return x;
    if(n%2==0) return (power((x%M)*(x%M)%M,n/2))%M;
    if(n%2==1) return (x%M)*(power(x,n-1))%M;
}



int power(int x,int n){
   if(n==0) return 1;
   if(n==1) return x%M;
   long long aux=1;
   for(int i=1;i<=n;i++) aux=((aux%M)*(x%M))%M;
   return aux;
}
*/

int power(int x, int n){
    int N=n;
    unsigned long long aux=1,value=1;
    while(n>0){
        if(n==N){
            value=x%m;
            n--;
        }
        else if(n==1){
                aux=x%m;
                n--;
             }
             else if(n%2==0){
                      value=((value%m)*(value%m))%m;
                      n=n/2;
                  }
                  else if(n%2==1){
                          aux=((aux%m)*(x%m))%m;
                          n--;
                       }
    }
    return ((value%m)*(aux%m))%m;
}


int main(){
    ifstream inFile("lgput.in");
    int baza,exponentul;
    inFile>>baza>>exponentul;
    ofstream outFile;
    outFile.open("lgput.out");
    outFile<<power(baza,exponentul);


}