Cod sursa(job #3298913)

Utilizator robertcd29Chira Robert-Denis robertcd29 Data 3 iunie 2025 01:25:23
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h> 

#define mod 1999999973

unsigned long long power(unsigned long long base, unsigned long long exp) {
    unsigned long long result = 1;
    base = base % mod;
    if (base == 0) return 0;

    while (exp > 0) {
        if (exp % 2 == 1) {
            result = (result * base) % mod;
        }
        base = (base * base) % mod; 
        exp = exp / 2;
    }
    return result;
}

int main() {
    FILE *fin = NULL;
    FILE *fout = NULL;
    if((fin = fopen("lgput.in", "r")) == NULL) {
        fprintf(stderr, "Eroare la deschidere\n");
        return 1;
    }
    if((fout = fopen("lgput.out", "w")) == NULL) {
        fprintf(stderr, "Eroare la deschidere\n");
        fclose(fin);
        return 1;
    }

    unsigned long long a,b;
    if (fscanf(fin, "%lld %lld", &a, &b) != 2) {
        fprintf(stderr, "Eroare la citire\n");
        fclose(fin);
        fclose(fout);
        return 1;
    }

    if (a < 2 || b > pow(2, 32)) {
        fprintf(stderr, "Nu se respecta conditiile\n");
    
        return 1;
    }
    unsigned long long result = power(a, b);
    fprintf(fout, "%lld\n", result);

    fclose(fin);
    fclose(fout);
    return 0;
}