Cod sursa(job #1344671)

Utilizator sulzandreiandrei sulzandrei Data 16 februarie 2015 21:46:41
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
#define llu unsigned long long int
llu  a,n;
int fi()
{
    llu  res=n,i;
    for(i=2;i*i<n;i++)
    {
        if (n%i==0) res -=res/i;
        while(n%i==0)
            res /=i;
    }
    if(n>1)
        res -= res/n;
    return res;
}
llu rtl(llu  p)
{
    if (p==0)
            return 1;
    else
    {
        if (p%2)
        {
            llu q = rtl(p/2);
        return ((q*a%n*q)%n);
        }
        else
        {
            llu q = rtl(p/2);
            return ((q*q)%n);
        }
    }


}
int main()
{
    llu p;
    in>>a>>n;
    p = fi()-1;
    out<<rtl(p);
}