Pagini recente » Cod sursa (job #3178120) | Cod sursa (job #2431241) | Cod sursa (job #374403) | Cod sursa (job #2836317) | Cod sursa (job #731234)
Cod sursa(job #731234)
#include<stdio.h>
int A,N;
int exp_log(int x)
{
int numar = 1,putere = x;
while(putere!=0)
{
if(putere%2)
numar = (1LL * A * numar) %N,putere--;
A = (1LL * A * A) %N,putere/=2;
}
return numar;
}
int indicator(int x)
{
float ind = x;
int aux = x;
for(int i = 2 ; x!=1 && i<= (aux+1)/2 ;i++)
if(x%i==0)
{
for(;x%i==0;x/=i);
ind*=(1 - (1.0/i));
}
if(x!=1)
ind--;
return (int)ind;
}
void rezolva()
{
printf("%d",exp_log(indicator(N)-1));
}
void citire()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
scanf("%d%d",&A,&N);
}
int main()
{
citire();
rezolva();
return 0;
}