Cod sursa(job #3134436)

Utilizator constantin_catalinaConstantin Catalina-Viviana constantin_catalina Data 29 mai 2023 00:27:22
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 REST 1999999973

double exp_log_rec(double N, int P)
{
  if(P < 0)
    {
      return exp_log_rec(1.0 / N, -P);
    }
  else if(P == 0)
    {
      return 1;
    }
  else if(P % 2 == 0)
    {
      return exp_log_rec(N*N, P/2);
    }
  else if(P % 2 == 1)
    {
      return N * exp_log_rec(N*N, P/2);
    }
  return 0;
}

int main(void)

{
  double  aux, result;
  unsigned int N, P;
  int long long sol;
  FILE *fin;
  FILE *fout;

  if((fin = fopen("lgput.in","r"))==NULL)
    {
      printf("Eroare deschidere fisier\n");
      exit(-1);
    }

  if((fout = fopen("lgput.out","w"))==NULL)
    {
      printf("Eroare deschidere fisier\n");
      exit(-1);
    }

  fscanf(fin,"%d %d", &N, &P);

  aux = N;

  result = exp_log_rec(aux, P);
  sol = result;
  sol = sol % REST;
  
  fprintf(fout,"%lld\n", sol);

  fclose(fin);
  fclose(fout);

  return 0;

}