Pagini recente » Cod sursa (job #1435361) | Cod sursa (job #1114092) | Cod sursa (job #2279774) | Cod sursa (job #2457538) | Cod sursa (job #789078)
Cod sursa(job #789078)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MOD 1999999973
int main()
{
long long int N, N1, N2;
int P, i, start = 0; /* Montgomery start. We need the first 1 */
FILE *f = fopen("lgput.in", "rt");
FILE *g = fopen("lgput.out", "wt");
fscanf(f, "%lld %d", &N, &P);
N1 = N % MOD;
N2 = ((N % MOD) * (N % MOD)) % MOD;
for(i = 8*sizeof(int) - 1; i >= 0; i--) {
if ((P >> i) & 1) {
if (!start) {
start = 1;
continue;
}
else {
N1 = ((N1 % MOD) * (N2 % MOD)) % MOD;
N2 = ((N2 % MOD) * (N2 % MOD)) % MOD;
}
}
else if (start) {
N2 = ((N1 % MOD) * (N2 % MOD)) % MOD;
N1 = ((N1 % MOD) * (N1 % MOD)) % MOD;
}
}
fprintf(g, "%lld", N1);
fclose(f);
fclose(g);
return 0;
}