Cod sursa(job #2330240)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 28 ianuarie 2019 09:41:57
Problema Invers modular Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

int euler(int n)
{
        int res=n;
        for(int p=2;p*p<=n;p++)
        {
                int cur=1;
                while(n%p==0)
                {
                        cur*=p;
                        n/=p;
                }
                cur/=p;
                res-=cur;
        }
        if(n>1)
        {
                res--;
        }
        return res;
}

int a,mod;

int add(int a,int b)
{
        a+=b;
        if(a>=mod)
        {
                a-=mod;
        }
        if(a<0)
        {
                a+=mod;
        }
        return a;
}

int mul(int a,int b)
{
        return a*(long long)b%mod;
}

int expow(int a,int b)
{
        int res=1;
        while(b)
        {
                if(b&1)
                {
                        res=mul(res,a);
                }
                a=mul(a,a);
                b>>=1;
        }
        return res;
}

int main()
{
        freopen("inversmodular.in","r",stdin);
        freopen("inversmodular.out","w",stdout);
        cin>>a>>mod;
        a%=mod;
        int inv=expow(a,euler(mod)-1);
        cout<<inv<<"\n";
        return 0;
}