Cod sursa(job #1869844)

Utilizator vladbatalanBatalan Vlad vladbatalan Data 6 februarie 2017 10:51:55
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.56 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lgput.in");
ofstream fout("lgput.out");
const int m = 1999999973;

int main()
{
    unsigned int i,n,p;
    long long a, sol;
    fin>>n>>p;
    a = n;
    sol = 1;
    for(int i=0; (1<<i) <= p; i++) ///parcurgem toti bitii puterii p
    {
        if(((1<<i) & p) > 0) /// daca am gasit un bit care este 1, adaugam n^2^i la solutie
            sol = (sol * a) % m;
        a = (a * a) % m ; ///odata ce trecem la bit ul urmator trebuie sa reinnoim si baza
    }
    fout<<sol;
    return 0;
}