Cod sursa(job #2512855)

Utilizator butasebiButa Gabriel-Sebastian butasebi Data 21 decembrie 2019 19:28:21
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;
int a, MOD, x, d, fi, fm;
int paw(int a, int b)
{
    if(b == 0)return 1;
    if(b == 1)return a;
    if(b % 2 == 0)return (paw(a, b / 2) * paw(a, b / 2)) % MOD;
    if(b % 2 == 1)return (a * paw(a, b / 2) * paw(a, b / 2)) % MOD;
}
int main()
{
    ifstream f("inversmodular.in");
    ofstream g("inversmodular.out");
    f >> a >> MOD;
    //Aflam fi(MOD)
    x = MOD;
    d = 2;
    fi = 1;
    do
    {
        fm = 0;
        while(x % d == 0)
        {
            x = x / d;
            fm ++;
        }
        if(fm > 0)fi = fi * paw(d, fm - 1) * (d - 1);
        d ++;
        if(d * d > x && x != 1)fi = fi * (x - 1), x = 1;
    }while(x != 1);
    g << paw(a, fi - 1) % MOD;
    return 0;
}