Cod sursa(job #3236067)
Utilizator | Antoniu Andreas AndreasAntoniu | Data | 25 iunie 2024 22:19:04 |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 0 |
Compilator | c-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.61 kb |
#include <stdio.h>
#include <stdint.h>
#define M (int64_t)1999999973
int64_t exp_log(int32_t x, int32_t n)
{
if (n == 0)
return 1;
int64_t p = 1;
while (n > 0)
{
p *= p;
if (n % 2)
{
p *= x;
}
n = n / 2;
}
return p;
}
int main()
{
FILE *file = fopen("lgput.in", "rb");
FILE *fileout = fopen("lgput.out", "w");
int32_t n, p;
fscanf(file, "%d", &n);
fscanf(file, "%d", &p);
fclose(file);
fprintf(fileout, "%ld", exp_log(n, p) % M);
fclose(fileout);
return 0;
}