Cod sursa(job #2456287)

Utilizator FastmateiMatei Mocanu Fastmatei Data 14 septembrie 2019 09:38:09
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <bits/stdc++.h>
#define MOD 1999999973
#define Nat long long

using namespace std;

ifstream fin("lgput.in");
ofstream fout("lgput.out");

Nat P1(Nat a,Nat n)
{
    Nat p=1;
    while(n>0)
    {
        if(n%2==1) p=p*a%MOD;
        n/=2;
        a=a*a%MOD;
    }
    return p;

}

Nat P2(Nat a,Nat n)
{
    Nat p=1,i;
    Nat t[32];
    t[0]=a;
    for(i=1;i<=30;i++)
        t[i]=t[i-1]*t[i-1]%MOD;
    i=0;
    while(n>0)
    {
        if(n%2==1) p=p*t[i]%MOD;
        n/=2;
        i++;
    }
    return p;
}

int main()
{
    Nat a,n;
    fin>>a>>n;
    fout<<P2(a,n);
    return 0;
}