Cod sursa(job #2437538)

Utilizator red_devil99Mancunian Red red_devil99 Data 9 iulie 2019 18:18:32
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
using namespace std;
#include <vector>
long long int r = 1999999973;
vector<int > reverse_number_on_bites(long long number){
	 vector<int> vec;
	 vec.resize(32);
	 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(long long a, long long b){
	std::vector<int > inter = reverse_number_on_bites(b);
	int m = 1;
	for(int i = 0; i < inter.size(); i++){
		m = (m * m)%r;
		if(inter[i] == 1){
			m = (m * a)%r;
		}
	}
	return m;

}

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;

}