Cod sursa(job #1960039)

Utilizator razviii237Uzum Razvan razviii237 Data 10 aprilie 2017 10:05:20
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <cstdio>

using namespace std;

FILE *f, *g;

#define fs fscanf
#define fp fprintf

#define mod 1999999973

typedef long long lint;

lint lgput(lint x, lint n)
{
    lint p = 1;
    /**
    while(n)
    {
        if(n & 1)
           {
                p*=x;
                p%=mod;
                n--;
           }
           x*=x;
           x%=mod;
           n >>= 1;
    }
    AICI AM STRICAT BITII, BRE !
    */

    for(int i = 0; (1<<i) <= n; i++)
    {
        if(((1<<i) & n) != 0)
            p = (p * x)  % mod;

      x *= x; x %= mod;
    }
    ///AICI NU AM STRICAT BITII, FA !


    return p;
}
int main()
{
    lint x, n; ///DECLAR LOCAL PENTRU CA SUNT JMEN
    f = fopen("lgput.in", "r");
    g = fopen("lgput.out", "w");

    fs(f, "%lld%lld", &x, &n);

    ///TIBE FA NU MAI MECHERES

    fp(g, "%lld", lgput(x, n));

    ///FAI, ASCUCHA ME

    return 0;
}