Cod sursa(job #1632263)

Utilizator dspMihaiDespotovici Mihai dspMihai Data 5 martie 2016 23:31:29
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>

#define MOD 1999999973

typedef struct {
	unsigned long int N;
	unsigned long int P;
} date_struct;

date_struct get_date(char* file_name) {
	date_struct date;
	FILE *in = fopen(file_name, "r");
	fscanf(in, "%ld %ld", &(date.N), &(date.P));
	fclose(in);
	return date;
}

unsigned long int put_log(unsigned long int N, unsigned long int P) {
	if (P == 0) {
		return 1;
	}
	if (P == 1) {
		return N % MOD;
	}
	if (P % 2) {
		return (N * put_log((N * N) % MOD, P / 2) ) % MOD;
	}
	return put_log((N * N) % MOD, P / 2) % MOD;
}

int main () {
	date_struct date = get_date("lgput.in");
	FILE *out = fopen("lgput.out", "w");
	fprintf(out, "%ld", put_log(date.N, date.P));
	fclose(out);
	return 0;
}