Cod sursa(job #478401)

Utilizator a.stanciuStanciu Adrian a.stanciu Data 18 august 2010 12:55:49
Problema Ridicare la putere in timp logaritmic Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 0.52 kb
#include <stdio.h>
#include <stdlib.h>

#define N 1999999973

long long lgput(int n, int p)
{
	long long r;
	if (p == 0) return 1;
	else
	{
		if (p % 2 == 1)
		{
			r = lgput(n, (p - 1) / 2) % N;
			return n * r * r;
		}
		else
		{
			r = lgput(n, p / 2) % N;
			return r * r;
		}
	}
}

int main()
{
	int n, p;
	long long r;
	FILE *f, *g;

	f = fopen("lgput.in", "r");
	g = fopen("lgput.out", "w");

	fscanf(f, "%d", &n);
	fscanf(f, "%d", &p);

	r = lgput(n, p);

	fprintf(g, "%lld\n", r % N);

	fclose(f);
	fclose(g);

	return 0;
}