Cod sursa(job #825176)

Utilizator SteveStefan Eniceicu Steve Data 27 noiembrie 2012 19:23:27
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <list>
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define mp(a,b) make_pair (a, b)
#define ll long long
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)

using namespace std;

int main ()
{
    long long N, P;
    ifstream fin ("lgput.in");
    fin >> N >> P;
    fin.close ();
    long long v[40], S = 1, mod = 1999999973;
    v[0] = N;
    for (int i = 1; i <= 33; i++)
        v[i] = (v[i - 1] * v[i - 1]) % mod;
    for (int i = 33; i >= 0; i--)
    {
        if (P >= (1LL << i))
        {
            S = (S * v[i]) % mod;
            P -= (1LL << i);
        }
    }
    ofstream fout ("lgput.out");
    fout << S;
    fout.close ();
    return 0;
}