Cod sursa(job #712545)

Utilizator iuli1505Parasca Iuliana iuli1505 Data 13 martie 2012 16:18:51
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.49 kb
#include<cstdio>
using namespace std;
long long a,n,m,k,i,p[30],sol;
int main()
{
	freopen("invmod.in","r",stdin);
	freopen("invmod.out","w",stdout);
	scanf("%lld%lld", &a, &n);
	m=n;
	for(i=2;i*i<=m;i++)
	{
		if(m==1)break;
		if(m%i)continue;
		p[++k]=i;
		while(m%i==0)m/=i;
	}
	if(m!=1)p[++k]=m;
	m=n;
	for(i=1;i<=k;i++)n/=p[i];
	for(i=1;i<=k;i++)n*=p[i]-1;
	sol=1;n--;
	while(n)
	{
		if(n%2)sol=(sol*a)%m;
		a=(a*a)%m;
		n/=2;
	}
	printf("%lld", sol);
	return 0;
}