Cod sursa(job #3356808)

Utilizator Dumitru_SerbinaDumitru Serbina Dumitru_Serbina Data 4 iunie 2026 12:43:23
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define MOD 1999999973ULL

uint64_t fast_pow(uint64_t n, uint64_t p, uint64_t mod){
  uint64_t result = 1;
  n = n % mod;

  while(p > 0){
    if(p & 1){
      result = (result * n) % mod;
    }
    n = (n * n) % mod;
    p >>= 1;
  }

  return result;
}

int main(void){
  FILE* fin  = NULL;
  FILE* fout = NULL;

  fin = fopen("lgput.in", "r");
  if(fin == NULL){
    perror("lgput.in");
    return 1;
  }

  fout = fopen("lgput.out", "w");
  if(fout == NULL){
    perror("lgput.out");
    fclose(fin);
    return 1;
  }

  uint64_t n = 0, p = 0;
  fscanf(fin, "%lu %lu", &n, &p);

  uint64_t result = fast_pow(n, p, MOD);
  fprintf(fout, "%lu\n", result);

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