Cod sursa(job #868806)

Utilizator sana1987Laurentiu Dascalu sana1987 Data 31 ianuarie 2013 17:34:12
Problema Invers modular Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

unsigned int getphi(unsigned int N) {
	unsigned int result = N;
	unsigned int i;
	for (i = 2; i * i <= N; i++) {
		if (N % i == 0) {
			while (N % i == 0) N /= i;
			result -= result / i;
		}
	}
	if (N != 1)
		result -= result / N;
	return result;
}

int main(int argc, char **argv) {
    freopen("inversmodular.in", "r", stdin);
    freopen("inversmodular.out", "w", stdout);

    unsigned int A, N;

    scanf("%d %d", &A, &N);
    unsigned int phi = getphi(N) - 1;

    unsigned int it = A, result = 1;
    unsigned int i;

    for (i = 1; i <= phi ; i = i << 1) {
    	if (phi & i) {
    		result = (result * it) % N;
    	}
    	it = (it * it) % N;
    }

    printf("%u", result);

    return 0;
}