Cod sursa(job #1348960)

Utilizator serbanSlincu Serban serban Data 19 februarie 2015 22:00:42
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define ull unsigned long long

using namespace std;

ull N,a,n,b=1;

ull phi(ull x)
{
    ull i,j=x-1;
    for(i=2;i*i<=x;i++)
    {
        if(x%i==0)
           j-=(x/i),x/=i;
    }
    return j;
}
int main()
{
    ull i,j=1;
    FILE *f=fopen("inversmodular.in","r");
    FILE *g=fopen("inversmodular.out","w");
    fscanf(f,"%lld %lld",&a,&n);
    i=phi(n)-1;
    while(i)
    {
        if(i>>1<<1!=i)
            j=(j*a)%n;
        a*=a;
        a%=n;
        i/=2;
    }
    j%=n;
    fprintf(g,"%lld\n",j);
    return 0;
}