Cod sursa(job #2070653)
Utilizator | Data | 19 noiembrie 2017 19:51:46 | |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.59 kb |
#include <stdio.h>
using namespace std;
FILE *fin;
FILE *fout;
unsigned long long N, P;
void raise(unsigned long long &N, unsigned long long P)
{
unsigned long long aux = N;
int i;
for(i = 2; i <= P; i *= 2)
{
N *= N;
N %= 1999999973;
}
if(i / 2 < P)
{
raise(aux, P - i / 2);
N *= aux;
N %= 1999999973;
}
}
int main()
{
fin = fopen("lgput.in", "r");
fout = fopen("lgput.out", "w");
fscanf(fin, "%d %d", &N, &P);
raise(N, P);
fprintf(fout, "%d", N);
return 0;
}