Cod sursa(job #1788467)

Utilizator OlivianOlivian Dan Cretu Olivian Data 26 octombrie 2016 00:12:11
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
#include<math.h>
using namespace std;
long long n,a;
long long po(long long a,long long b)
{
    long 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 p = n;
    long long q = p;
    for(long i = 2; i<=sqrt(p); i++)
    {
        if(p % i == 0)
            q = q * (i - 1) / i;
        while(p % i == 0)
            p = p / i;
    }
    if(p > 1)
        q = q * (p - 1) / p;
    return (long long)q;
}
long long inv(long long a,long long n)
{
    long long x=phi();
    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));
}