Cod sursa(job #1792154)

Utilizator MirceaTMircea Timpuriu MirceaT Data 30 octombrie 2016 08:18:16
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout ("inversmodular.out");
int rid_put(long long a,long long n,long long mod)
{
    int prod=1;
    for(long long i=1;i<=n;i<<=1)
    {
        if(i&n) prod=(1LL*prod*a)%mod;
        a=(1LL*a*a)%mod;
    }
    return prod;
}
int main()
{
    long long i,j,a,n,n1,n2;
    char v[2000000];
    fin>>a>>n;
    n1=n;
    n2=n;
    for(i=2;i<=sqrt(n2);++i)
    {
        if(n%i==0)
        {
        while(n%i==0)
        {
            n/=i;
        }
        n1=n1*(i-1)/i;
        }
    }
    if(n!=1)
    {
        n1=n1*(n-1)/n;
    }
    fout<<rid_put(a,n1-1,n2);

}