Cod sursa(job #932234)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 28 martie 2013 19:41:44
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<fstream>


using namespace std;

ifstream f("inversmodular.in");
ofstream g("inversmodular.out");

long long n , m ;

long long fi( long long x){
	
	long long count = x;
	
	for(long long i = 2 ; i*i <= x ; i++){
		if(x%i == 0){
			while(x%i == 0) x /= i;
			count = (count/i)*(i-1);
		}
	}
	
	if(x != 1) count = (count/x)*(x-1);
	
	return count;	
}

long long putere(long long a , long long b){
	
	long long p = a , sol = 1;
	
	while(b){
		
		if(b%2 == 1){
			sol *= p;
			sol %= m;
		}
		
		p *= p; p %= m;
		
		b /= 2;
	}
	return sol;
}

int main(){
	
	long long x;
	
	f>>n>>m;
	
	x = fi(m);
	
	g<<putere(n , x - 1);
	
	return 0;
}