Cod sursa(job #161760)
Utilizator | Popovici Adrian mithy | Data | 18 martie 2008 19:25:34 |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.53 kb |
#include <stdio.h>
#define lgpmax 31
#define MOD 1999999973
long long p[lgpmax];
long long x, n, rez, i;
int main()
{
// p[i] = x^(2^i)%MOD;
FILE *fin = fopen("lgput.in", "rt");
FILE *fout = fopen("lgput.out", "wt");
fscanf(fin, "%lld %lld", &x, &n);
p[0] = x;
for (i = 1; i < lgpmax; i++)
p[i] = (p[i-1] * p[i-1])%MOD;
rez = 1;
for (i = lgpmax - 1; i >= 0; i--)
{
while (n >= (1 << i))
{
rez *= p[i];
rez %= MOD;
n -= (1 << i);
}
}
fprintf(fout, "%lld\n", rez);
return 0;
}