Cod sursa(job #2111345)

Utilizator radu_cosmaRadu Cosma radu_cosma Data 21 ianuarie 2018 21:35:33
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include<fstream>
using namespace std;
ifstream in("lgput.in");
ofstream out("lgput.out");
int n, nr_iter=0,p;
long long c=1999999973;
int fibo(int n)
{
    nr_iter++;
    if (n<=2) return 1;
    else return fibo(n-1)+fibo(n-2);
}

long long ridnorm(long long n, long long p)
{
    int k=1;
    for(int i=1; i<=p; i++)
    {
        nr_iter++;
        k*=n;
    }
    return k;
}

long long t(long long a,long long b) //a la b la suta c
{
    nr_iter++;
    if(b==0)
    {
        return 1;
    }
    else if(b==1)
    {
        return a%c;
    }
    if(b%2==0)
    {
        long long aux=t(a,b/2);
        return (aux*aux)%c;
    }
    if(b%2==1)
    {
        return (t(a,b-1)*a)%c;
    }
}
long long timplog(long long a, long long b)
{
    nr_iter++;
    if(b<0) return timplog(1/a,-b)%c;
    else if(b==0) return 1;
    else if(b==1) return a%c;
    else if(b%2==0) return timplog(a*a,b/2)%c;
    else if(b%2==1) return a*timplog(a*a,(b-1)/2)%c;
}
int main()
{
    in>>n>>p;
    //cout<<fibo(n);
    //cout<<ridnorm(n,p)<<"\n";
    //cout<<t(n,p)<<"\n";
    out<<timplog(n,p)<<"\n";
    //cout<<nr_iter<<"\n";
    return 0;
}