Cod sursa(job #913593)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 13 martie 2013 17:13:04
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.56 kb
#include <cstdio>
typedef long long l;
using namespace std;
l x,n;
l phi(l n)
{
	l a=n;
	for(l i=2;i*i<=n&&n>1;i++)
		if(n%i==0)
		{
			while(n%i==0&&n>1)
				n=n/i;
			a=(a/i)*(i-1);
		}
	if(n!=1)
		a=(a/n)*(n-1);
	return a;
}
l rid(l power)
{
	l aux=x%n,ans=1;
	while(power)
	{
		if(power%2==1)
			ans=(ans*aux)%n;
		aux=(aux*aux)%n;
		power/=2;
	}
	return ans;
}
int main()
{
	freopen("inversmodular.in","r",stdin);
	freopen("inversmodular.out","w",stdout);
	scanf("%lld%lld",&x,&n);
	printf("%lld\n",rid(phi(n)-1));
	return 0;
}