Cod sursa(job #2402563)

Utilizator alexandrionUNIBUC Marcu Alexandru alexandrion Data 10 aprilie 2019 20:05:06
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;
int y;
ifstream fin("lgput.in");
ofstream fout("lgput.out");


int functie_de_ridicare_la_putere_2(int x,int n)
{
    if(n<0)
    {
        x=1/x;
        n=-n;
    }
    if(n==0)
    {
        return 1;
    }
    y=1;
    while(n>1)
    {
        if(n%2==0)

        {
            x=x*x;
            n=n/2;
        }
        if(n%2==1)
        {
            y=y*x;
            x=x*x;
            n=(n-1)/2;
        }
    }
    return x*y;
}





int functie_de_ridicare_la_putere(int N,int P)
{
    if(P==0)
    {
        return 1;
    }
    if(P==1)
    {
        return N;
    }
    else
    if(P%2==0)
    {
        return functie_de_ridicare_la_putere(N*N,P/2);
    }
    else
    {
        return N*functie_de_ridicare_la_putere(N*N,(P-1)/2);
    }

}

int main()
{ int N,P;
 fin>>N>>P;
 fout<<functie_de_ridicare_la_putere(N,P)%1999999973;


}