Cod sursa(job #3298951)

Utilizator abel3324Ursu Abel-Patrick abel3324 Data 3 iunie 2025 14:31:20
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

#define MOD 1999999973

uint64_t power(uint64_t base,uint64_t exp)
{
    uint64_t res=1;
    base%=MOD;
    while(exp>0)
    {
        if(exp%2)
        {
            res=(res*base)%MOD;
        }
        base=(base*base)%MOD;
        exp/=2;
    }
    return res;
}

int main(void)
{   
    FILE *fin=fopen("lgput.in","r");
    FILE *fout=fopen("lgput.out","w");
    if(fin==NULL || fout==NULL)
    {
        fprintf(stderr,"eroare la deschiderea fisierelor");
        exit(EXIT_FAILURE);
    }
    uint64_t N,P;
    if((fscanf(fin,"%lu %lu",&N,&P))!=2)
    {
        fprintf(stderr,"eroare la citirea din fisier");
        exit(EXIT_FAILURE);
    }
    uint64_t rez=power(N,P);
    fprintf(fout,"%lu\n",rez);
    if((fclose(fin))!=0)
    {
        fprintf(stderr,"eroare la inchiderea fisierului de citire");
        exit(EXIT_FAILURE);
    }
    if((fclose(fout))!=0)
    {
        fprintf(stderr,"eroare la inchiderea fisierului de scriere");
        exit(EXIT_FAILURE);
    }

    return 0;
}