Cod sursa(job #1001936)

Utilizator Stefanescu_MihaiStefanescu Mihai-Nicolae Stefanescu_Mihai Data 26 septembrie 2013 16:29:37
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
using namespace std;
long long modp(long long a)
{
    if (a>0)
        return a;
    return -a;
}
long long exp(int n,long long e)
{
    if (e<=1)
        return n;
    long long rez=exp(n,e>>1);
    rez=(rez*rez)%666013;
    if (e&1)
        rez*=n;
    return rez%666013;
}
int main()
{
    int i,x;
    long long k,p;
    long long n;
    ifstream f1("invazie.in");
    ofstream f2("invazie.out");
    f1>>x;
    for (i=0;i<x;++i)
    {
        f1>>k>>p>>n;
        if (!n)
        {
            f2<<"1\n";
            continue;
        }
        p%=666013;
        k%=666013;
        f2<<((exp((k+p)%666013,n)-exp(modp(k-p),n))>>1)<<'\n';
    }
    f1.close();
    f2.close();
    return 0;
}