Cod sursa(job #1723098)

Utilizator NecoaraGabrielNecoara Gabriel-Stefan NecoaraGabriel Data 29 iunie 2016 18:04:11
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<iostream>
#include<fstream>
#define ll long long
using namespace std;

int exp(int x,int n)
{
    if(n<0)
        return -n;
    else if(n==0)
        return 1;
    else if(n==1)
        return x;
    else if(n%2==0)
        return exp(x*x,n/2);
    else if(n%2==1)
        return x*exp(x*x,(n-1)/2);
}
ll exp2(ll x,ll n)
{int y;
    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%1999999973;
        }
        else
        {
            y=y*x;
            x=x*x;
            n=(n-1)/2%1999999973;
        }

    return x*y;
}
ifstream f("lgput.in");
ofstream g("lgput.out");

int main()
{
    ll x,n;
    //cout<<"x=";cin>>x;
   // cout<<x<<" la puterea n=";cin>>n;
f>>x>>n;
 //   cout<<exp(x,n)<<endl;
    g<<exp2(x,n)%1999999973;

    return 0;

}