Cod sursa(job #1810618)

Utilizator unknownpersonBidasca Carina Georgiana unknownperson Data 20 noiembrie 2016 13:01:53
Problema Invers modular Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#define tip long long
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");

tip a,n,m,i,k,p[40],MOD,putere(tip,tip);
int main()
{
    f>>a>>n;
    m=n;MOD=n;
    if(m%2==0)
    {
        k++;
        p[k]=2;
        while(m%2==0)
            m/=2;
    }
    for(i=3;i*i<=m;i+=2)
        if(m%i==0)
        {
            k++;
            p[k]=i;
            while(m%i==0)
                m/=i;
        }
    if(m>1)
        k++,p[k]=m;
    for(i=1;i<=k;i++)
        n=n/p[k]*(p[k]-1);
    n--;
    g<<putere(a,n);
    return 0;
}
tip putere(tip b,tip e)
{
    tip r=1;
    while(e)
    {
        if(e%2)
            r=(r*b)%MOD;
        b=(b*b)%MOD;
        e/=2;
    }
    return r;
}