Cod sursa(job #2518467)

Utilizator butasebiButa Gabriel-Sebastian butasebi Data 5 ianuarie 2020 19:57:39
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
using namespace std;
int a, MOD, x, d, fi, fm, i;
int rez;
int paw(int a, int b)
{
    int r = 1, A = a;
    if(b == 0)return 1;
    while(b > 1)
    {
        if(b % 2 == 1)r = (r * A) % MOD;
        A = (A * A) % MOD;
        b = b / 2;
    }
    return (r * A) % 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)) % MOD;
        d ++;
        if(d * d > x && x != 1)fi = (fi * (x - 1)) % MOD, x = 1;
    }while(x != 1);
    g << paw(a, fi - 1) % MOD << "\n";
    return 0;
}