Cod sursa(job #1632276)

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

#define MOD 1999999973

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

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

unsigned long long int put_log(unsigned long long int N, unsigned long 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, "%llu\n", put_log(date.N, date.P));
	fclose(out);
	return 0;
}