Cod sursa(job #2423309)

Utilizator dragosmdvMoldovan Dragos dragosmdv Data 20 mai 2019 23:52:08
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>

//returneaza rezultatul ridicarii lui n la puterea p
long long int power2(long long int n, long long int p)
{
	if (p == 1)
		return n % 1999999973;
	if (p == 0)
		return 1;
	if (p % 2 == 0)
		return (power2(n, p / 2) * power2(n, p / 2)) % 1999999973;
	else
		return ((power2(n, p / 2) * power2(n, p / 2) ) % 1999999973 * n) % 1999999973;
}

long long int power(long long int n, long long int p)
{
	long long int rez = 1;
	while(p){
		if (p % 2 == 0)
		{
			n = (n * n) % 1999999973;
			p /= 2;
		}
		if (p % 2 == 1)
		{
			rez = (rez * n) % 1999999973;
			p--;
		}
	}
	return rez ;

}


int main()
{
	FILE *fL = fopen("Lgput.in", "r");
	
	long long int n, p;
	fscanf(fL,"%lli", &n);
	fscanf(fL, "%lli", &p);
	fclose(fL);

	FILE *fL2 = fopen("Lgput.out", "w");
	fprintf(fL2, "%lli\n", power(n, p));
	fclose(fL2);

	//system("pause");
	return 0;
}