Cod sursa(job #1726355)
| Utilizator | Data | 7 iulie 2016 20:14:07 | |
|---|---|---|---|
| Problema | Ridicare la putere in timp logaritmic | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.52 kb |
#include<stdio.h>
#define Q 1999999973
int main()
{
FILE *inputFile, *outputFile;
inputFile=fopen("lgput.in","r");
outputFile=fopen("lgput.out","w");
long long n, p, y=1;
fscanf(inputFile, "%lli", &n);
fscanf(inputFile, "%lli", &p);
if(p == 0)
{
fprintf(outputFile, "%lli", 1);
return 0;
}
while(p > 1)
{
if(p % 2 == 0)
{
n=(n*n)%Q;
p=p/2;
}
else
{
y=(y*n)%Q;
n=(n*n)%Q;
p=(p-1)/2;
}
}
fprintf(outputFile, "%lli", (y*n)%Q);
return 0;
}