Cod sursa(job #1878939)

Utilizator WebDesignbyTMGhiorghiu Ioan-Viorel WebDesignbyTM Data 14 februarie 2017 17:00:18
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#define md 1999999973
using namespace std;

ifstream fi ("lgput.in");
ofstream fo ("lgput.out");

long long n, p, a = 1, s = 1, cn;

int main ()
{
    fi >> n >> p;
    cn = n;
    while (a*2 < p || a*2 == p)
    {
        n = (n*n)%md;
        a*=2;
    }
    s*=n;
    s%=md;
    if (p - a > 0)
    {
        p-=a;
        cn = n;
        a = 1;
    }
    else
    {
        fo << s;
        return 0;
    }
    while (a*2 < p || a*2 == p)
    {
        n = (n*n)%md;
        a*=2;
    }
    s*=n;
    s%=md;
    if (p - a > 0)
    {
        p-=a;
        cn = n;
        a = 1;
    }
    else
    {
        fo << s;
        return 0;
    }
    return 0;
}