Cod sursa(job #877396)

Utilizator Viva12Ferentz Sergiu Viva12 Data 12 februarie 2013 20:35:05
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#define mod 1999999973
using namespace std;

long long lgPut(long long x,long long y)
{
    long long rez = 1;
    while(y!=1)
    {
    if(y%2 == 0)
    {
        y/=2;
        x = (x*x)%mod;
    }
    else
        {
        rez=(rez*x)%mod;
        y--;
        }
    }
    return rez*x%mod;
}
long long lgPutRecursive(long long x, long long y)
{
    if(y == 1)
        return x;

    if(y%2==0)
       {long long rez = lgPutRecursive(x,y/2)%mod;
        return (rez*rez)%mod;
       }
    else
        return x*lgPutRecursive(x,y-1)%mod;

}
int main()
{
    freopen("lgput.in","r",stdin);
    freopen("lgput.out","w",stdout);
    int x,y;
    scanf("%ld %ld",&x,&y);
    printf("%ld\n",lgPut(x,y)%mod);
    //printf("%ld\n",lgPutRecursive(x,y));
    return 0;
}