Cod sursa(job #2272214)

Utilizator arosearose red arose Data 29 octombrie 2018 20:43:49
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#include <stdint.h>

#define MOD 1999999973


uint64_t multiply(uint64_t a, uint64_t b, uint64_t mod) 
{
    uint64_t res = 0;
    a = a % mod; 
    while (b > 0) 
    { 
        if (b % 2 == 1) 
            res = (res % mod + a % mod) % mod; 
        a = (a * 2) % mod; 
        b /= 2; 
    }
    return res % mod; 
} 

int fast_exp(uint64_t n,  uint64_t p)
{
	uint64_t r = 1;
	for (int i=31;i>=0;i--) {
		if ((p>>i)%2==1)
		{
			r = multiply(r,n,MOD);
		}
		if (i!=0)
		r = multiply(r,r,MOD);
	}
	return r;
}

int main()
{
	FILE *inptr = fopen("logput.in","r");
	FILE *outptr = fopen("logput.out","w");

	uint64_t n,p;
	int a;
	fscanf(inptr,"%d %d", &n, &a);
	p = a;

	fprintf(outptr,"%lld", fast_exp(n,p));

	return 0;
}