Cod sursa(job #1438996)

Utilizator MarianMMorosac George Marian MarianM Data 21 mai 2015 11:28:21
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#define _CRT_SECURE_NO_DEPRECATE

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <iterator>
#include <queue>
#include <utility>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;

#define DMAX 2000001
#define MOD 1999999973
#define ll long long
#define ull unsigned long long

int N, P;
bool ciur[DMAX];

int main(){
	int i, j;

	freopen("lgput.in", "r", stdin);
	freopen("lgput.out", "w", stdout);
	/*freopen("test.in", "r", stdin);
	freopen("test.out", "w", stdout);*/

	cin >> N >> P;

	vector<bool> binP;

	while (P){
		binP.push_back(P % 2);
		P /= 2;
	}

	ll X = 1;
	for (i = binP.size() - 1; i >= 0; i--){
		X *= X, X %= MOD;
		if (binP[i]){
			X *= N, X %= MOD;
		}
	}

	cout << X;

	return 0;
}