Cod sursa(job #1212417)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 24 iulie 2014 17:27:44
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;
long long a, aux, x, n, o, d, nr, mod;
long long putere(long long a, long long x)
{
    long long p=a, b=x, q=1;
    while(b)
    {
        if(b&1)
        {
            q=(q*p)%mod;
        }
        p=(p*p)%mod;
        b>>=1;
    }
    return q;
}
int main()
{
    freopen("inversmodular.in", "r", stdin);
    freopen("inversmodular.out", "w", stdout);
    scanf("%d%d", &a, &n);
    aux=n;
    d=1;
    mod=n;
    o=1;
    while(d*d<=aux)
    {
        d++;
        nr=0;
        while((aux%d)==0)
        {
            nr++;
            aux/=d;
        }
        if(nr)
        {
            o=o*(d-1)*putere(d,nr-1);
        }
    }
    if(aux!=1)
    {
        o=o*(aux-1);
    }
    printf("%lld", putere(a,o-1));
    return 0;
}