Cod sursa(job #1459606)

Utilizator zvonTutuldunsa Voronokda zvon Data 10 iulie 2015 13:05:14
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#define MOD 1999999973

using namespace std;

int ridicare(int n, int p) {
    if (p == 0)
        return 1;
    else if (p == 1)
        return n % MOD;
    else
        if (p % 2 == 0)
            return ridicare(((n % MOD) * (n % MOD)) % MOD, p / 2) % MOD;
        else
            return ((n % MOD) * ridicare(((n % MOD) * (n % MOD)) % MOD, p / 2)) % MOD;
}

int ridicare2(int n, int p) {
    int y = 1;
    while (p > 1) {
        if (p % 2 == 0) {
            n = ((n % MOD) * (n % MOD)) % MOD;
            p = p / 2;
        } else {
            y = ((y % MOD) * (n % MOD)) % MOD;
            n = ((n % MOD) * (n % MOD)) % MOD;
            p = p / 2;
        }
    }
    return ((y % MOD) * (n % MOD)) % MOD;
}

int ridicare3(int n, int p) {
    int rez = 1;
    for (int i = 0; i < p; i++) {
        rez = ((rez % MOD) * (n % MOD)) % MOD;
    }
    return rez;
}

int main() {
    int n;
    int p;
    ifstream fi("lgput.in");
    ofstream fo("lgput.out");

    fi >> n >> p;
    fo << ridicare3(n, p);
    fi.close();
    fo.close();
    return 0;
}