Cod sursa(job #1788457)

Utilizator OlivianOlivian Dan Cretu Olivian Data 25 octombrie 2016 23:54:51
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<cstdio>
#include<math.h>
using namespace std;
int n,a;
int po(int a,int b)
{
    int sol=1;
    for(;b;b>>=1)
    {
    if(b&1)   sol=(sol*a)%n;
    a=(a*a)%n;
    }
    return sol;
}
int phi(int a)
{
    int p=a,q=a;
    for(int i=2;i<=sqrt(a);i++)
    {
        if(q%i==0)
        {
           p/=i;p=p*(i-1);
           while(q%i==0) q/=i;
        }
    }
    if(p!=a) return p; else return p-1;
}
int inv(int a,int n)
{
    int x=phi(n);
    x--;
    return po(a,x);
}
int main()
{
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    scanf("%d %d",&a,&n);
    printf("%d ",inv(a,n));
}