Cod sursa(job #3232631)

Utilizator Mihai_ToderascToderasc Mihai Mihai_Toderasc Data 31 mai 2024 17:39:48
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#include <stdlib.h>

#define MOD 1999999973
#define FILE_IN "lgput.in"
#define FILE_OUT "lgput.out"

int exponentiate(int x, int n) {
    if(n == 0) return 1;
    if(n < 0) {
        x = 1 / x;
        n = -n;
    }
    int y = 1;
    while(n > 1) {
        if(n % 2) {
            y = y * x;
            n--;
        }
        x = x * x;
        x = x % MOD;
        n = n / 2;
    }

    return y * x;
}

int main()
{
    FILE *fileIn = fopen(FILE_IN, "r"),
         *fileOut = fopen(FILE_OUT, "w");
    int n, p;

    fscanf(fileIn, "%d%d", &n, &p);

    int result = exponentiate(n, p);
    fprintf(fileOut, "%d\n", result);

    fclose(fileIn);
    fclose(fileOut);

    return 0;
}