Cod sursa(job #1754261)

Utilizator refugiatBoni Daniel Stefan refugiat Data 7 septembrie 2016 19:35:09
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
#include<iostream>
#define ll long long
using namespace std;
ifstream si("inversmodular.in");
ofstream so("inversmodular.out");
ll phi(ll val)
{
    ll cont=val;
    ll i;
    if(val%2==0)
    {
        while(val%2==0)
        {
            val/=2;
        }
        cont/=2;
    }
    for(i=3;i*i<=val;i+=2)
    {
        if(val%i==0)
        {
            while(val%i==0)
            {
                val/=i;
            }
            cont=(cont/i)*(i-1);
        }
    }
    if(val!=1)
    {
        cont=cont/val*(val-1);
    }
    return cont;
}

int main()
{
    ll n,m;
    si>>n>>m;
    ll put=phi(m)-1;
    ll val=1;
    while(put)
    {
        if(put&1)
        {
            val=(val*n)%m;
        }
        n=(n*n)%m;
        put>>=1;
    }
    so<<val;
    return 0;
}