Cod sursa(job #3236071)

Utilizator AndreasAntoniuAntoniu Andreas AndreasAntoniu Data 25 iunie 2024 22:52:19
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;
}