Cod sursa(job #1380191)

Utilizator western100Sutu Eusebiu western100 Data 6 martie 2015 22:59:10
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>

using namespace std;

ifstream f("inversmodular.in");
ofstream g("inversmodular.out");

int main()
{
    int n,a,nc,v[10],k=0,i,j;
    bool p;
    f>>a>>n;
    nc=n;
    if(!(nc%2))
    {
        k++;
        v[k]=2;
        while(!nc%2)
            nc/=2;
    }
    for(i=3;i*i<=nc;i+=2)
    {
        if(!(nc%i))
        {
            k++;
            v[k]=i;
            while(!(nc%i))
                nc/=i;
        }
    }
    if(nc-1)
    {
        k++;
        v[k]=nc;
    }
    if(!k)
        j=n-1;
    else
    {
        j=n;
        for(i=1;i<=k;i++)
            {
                j/=v[i];
                j*=v[i]-1;
            }
    }
    j--;
    unsigned long long x=a,x1=1;
    while(j)
    {
        if(j%2)
        {
            x1*=x;
            x1%=n;
            x*=x;
            x%=n;
            j/=2;
        }
        else
        {
            j/=2;
            x*=x;
            x%=n;
        }
    }
    if(a==1) g<<n+1;
    else g<<x1;
    return 0;
}