Cod sursa(job #1344658)

Utilizator sulzandreiandrei sulzandrei Data 16 februarie 2015 21:37:23
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
int a;
int fi(int n)
{
    int 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;
}
unsigned long long int rtl(int n,int p)
{
    if (p==0)
            return 1;
    else
    {
        if (p%2)
        {
            unsigned long long int q = rtl(n,p/2);
            q = ((a*q)%n*q)%n;
            return q;
        }
        else
        {
            unsigned long long int q = rtl(n,p/2);
            q = (q*q)%n;
            return q;
        }
    }


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