Cod sursa(job #3233821)

Utilizator danyy13Perhaita Daniel danyy13 Data 5 iunie 2024 00:59:00
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <stdlib.h>

#define DIV 1999999973
#define INPUT_FILE "lgput.in"
#define OUTPUT_FILE "lgput.out"

unsigned int expBySquaring(unsigned int n, unsigned int p) {
    if(p == 0) return 1;
    unsigned int y = 1;
    while(p > 1) {
        if(p % 2 != 0) {
            y = n * y;
            p = p - 1;
        }
        n = n * n;
        p = p / 2;
        n %= DIV;
    }
    return n * y;
}

int main() {
    unsigned int n = 0, p = 0;
    FILE *in = NULL, *out = NULL;

    if((in = fopen(INPUT_FILE, "r")) == NULL) {
        fprintf(stderr, "Eroare la deschidere fisier intrare\n");
        exit(-1);
    }

    if((out = fopen(OUTPUT_FILE, "w")) == NULL) {
        fprintf(stderr, "Eroare la deschidere fisier iesire\n");
        exit(-1);
    }

    fscanf(in, "%u %u", &n, &p);

    fprintf(out, "%u\n", expBySquaring(n, p));

    fclose(in);
    fclose(out);
    return 0;
}