Cod sursa(job #254760)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 7 februarie 2009 14:28:22
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include <stdio.h>
int euler(int n)
{
	int i=1,rez=n; 
	for (i=2; i*i<=n; i++)
	{
		if (n%i==0)
		{
			while(n%i==0)
				n/=i;
			rez=rez/i*(i-1);
		}
	}
	if (n!=1)
		rez=rez/n*(n-1);
	return rez;
}
int power(int a,int b,int c)
{
	int s=1;
	while(b)  
    {  
	if (b%2)  
		s=s*a%c;  
	a=a*a%c;  
	b/=2;  
	}  
	return s;
}
int main()
{
	freopen("inversmodular.in","r",stdin);
	freopen("inversmodular.out","w",stdout);
	int a,b,t,rez;
	scanf("%d%d",&a,&b);
	t=euler(b)-1;
	rez=power(a,t,b)%b;
	printf("%d",rez);
	return 0;
}