Cod sursa(job #2437519)

Utilizator red_devil99Mancunian Red red_devil99 Data 9 iulie 2019 17:58:02
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
#include <vector>

vector<long long> reverse_number_on_bites(int number){
	 vector<long long> vec;
	 vec.resize(10000);
	 for (int i = 0; i < vec.size(); i++){
	 	vec[i] = 0;
	 }
	 int nr = -1;
	 while(number != 0){
		if(number % 2 == 0){
			vec[vec.size() -1 - (++nr)] = 0;
			
		}else {
			vec[vec.size() -1 - (++nr)] = 1;
			
		}
		number=number/2;
	}
	return vec;
}


int ridicare(int a, int b){
	long int r = 1999999973;
	std::vector<long long> inter = reverse_number_on_bites(b);
	int m = 1;
	for(int i = 0; i < inter.size(); i++){
		m = m * m;
		if(inter[i] == 1){
			m = m * a;
		}
	}
	return m%r;

}

int main(){
	std::ifstream fin("lgput.in");
	std::ofstream fout("lgput.out");
	long long rez, a, b;
	fin >> a >> b;
    
	rez = ridicare(a, b);
	fout << rez <<'\n';
	
	 
	return 0;

}