Cod sursa(job #449266)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 6 mai 2010 01:31:39
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
# include <cstdio>

using namespace std;

# define FIN "lgput.in"
# define FOUT "lgput.out"

long long N, P, M;
    
    long long pow(long long baza, long long putere) {
         long long sol = 1, bnd;
         
         for (bnd = 0; (1 << bnd) <= putere >> 1; ++bnd);
         for (int i = 0; i <= bnd; ++i) {
             if ((putere & (1 << i))) sol = (sol * baza) % M;
             baza = (baza * baza) % M;
         }
         
         return sol;
     }

    int main() {
        freopen(FIN, "r", stdin);
        freopen(FOUT, "w", stdout);
        
        M = 1999999973;
        scanf("%lld%lld", &N, &P);
        
        printf("%lld\n", pow(N, P));
        
        return 0;
    }