Cod sursa(job #3298354)

Utilizator sonia.peiovPeiov Sonia sonia.peiov Data 29 mai 2025 00:19:19
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
// https://infoarena.ro/problema/lgput
// Dandu-se doua numere naturale N si P, se cere sa se calculeze restul impartirii lui N^P la 1999999973.

#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

unsigned long long int MOD = 1999999973;

// Functia calculeaza baza^exponent folosind exponentierea rapida
long long ExponentiereRapida(unsigned long long int base, unsigned long long int exponent)
{
	unsigned long long int result = 1;
	while (exponent > 0)
	{
		if (exponent % 2 == 1)
			result = (result * base) % MOD;
		base = (base * base) % MOD;
		exponent /= 2;
	}
	return result;
}

int main()
{
    ifstream fin("lgput.in");
	ofstream fout("lgput.out");

    if (!fin.is_open())
    {
        cerr << "Eroare la deschiderea fisierului de intrare!";
        return 1;
    }
	if (!fout.is_open())
	{
		cerr << "Eroare la deschiderea fisierului de iesire!";
		return 1;
	}


	unsigned long long int N, P;
	fin >> N >> P;
	if (N < 2 || P > pow(2, 32))
	{
		cerr << "Nu se respecta restrictiile: N <= 2 si P <= 2^32";
		return 1;
	}
	
	fout << ExponentiereRapida(N, P) << endl;
	
	fin.close();
	fout.close();

	return 0;
}