Cod sursa(job #1318512)

Utilizator LycrsTrifan Tamara Lycrs Data 16 ianuarie 2015 00:20:09
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("inversmodular.in");
ofstream cout("inversmodular.out");

long long n, m;

long long sol(int nr)
{
    long long c=nr, i;
    for ( i=2; i*i<=nr; ++i)
        if (nr%i == 0)
    {
        while (nr % i ==0) nr/=i;
        c=(c/i)*(i-1);
    }
    if (nr!=1) c=c/ nr * (nr-1);
    return c;
}

int main()
{
    cin>>n>>m;
    long long p=sol(m)-1, nr=n, c=1;


    while (p)
    {
        if (p%2)
        {
            c=(c*nr) %m;
            --p;
        }
        else
        {
            nr=(nr*nr) %m;
            p/=2;
        }
    }

    cout<<c;



    return 0;
}