Cod sursa(job #1459139)

Utilizator dorumusuroiFMI - Doru Musuroi dorumusuroi Data 9 iulie 2015 11:16:29
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;

const char iname[] = "lgput.in";
const char oname[] = "lgput.out";

const int mod = 1999999973;


int main()
{
    FILE *in = fopen(iname, "r");
    FILE *out = fopen(oname, "w");
    long int r, a;
    long int n, p;
    fscanf(in, "%ld %ld", &n, &p);

    r = 1;
    a = n;

    while(p > 1)
    {
        if(1 & p)
        {
            r = (r * a)%mod;
            a = (a * a)%mod;
            p = (p-1)/2;
        }
        else
        {
            a = (a * a)%mod;
            p = p / 2;
        }
    }

    r = (r*a)%mod;

    fprintf(out, "%ld", r);

    return 0;
}