Cod sursa(job #1788463)

Utilizator OlivianOlivian Dan Cretu Olivian Data 26 octombrie 2016 00:02:32
Problema Invers modular Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<cstdio>
#include<math.h>
using namespace std;
long long n,a;
long long po(long long a,long long b)
{
    long sol=1;
    for(;b;b>>=1)
    {
    if(b&1)   sol=((sol%n)*(a%n))%n;
    a=((a%n)*(a%n))%n;
    }
    return sol;
}
long long phi(long long a)
{
    long long p=a,q=a;
    for(long long 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;
}
long long inv(long long a,long long n)
{
    long long x=phi(n);
    x--;
    return po(a,x);
}
int main()
{
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    scanf("%lld %lld",&a,&n);
    printf("%lld ",inv(a,n));
}