Cod sursa(job #2518263)

Utilizator Ionut10Floristean Ioan Ionut10 Data 5 ianuarie 2020 13:54:10
Problema Invers modular Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");

int a, n;
long long nr = 1;

long long putere(long long a, long long b, int mod)
{
    long long r = 1;
    while(b > 0)
    {
        if(b % 2 == 1)
            r = (r * a) % mod;
        a = (a * a) % mod;
        b /= 2;
    }
    return r;
}

long long Euler(long long x)
{
    long long d = 2;
    int p;
    bool intra = 0;
    while(d * d <= x)
    {
        if(x % d == 0)
        {
        p = 0;
        intra = 1;
        while(x % d == 0)
        {
            x /= d;
            p++;
        }
        nr *= ((d - 1) * putere(d, p - 1, 1));
        }
        d++;
    }
    if(intra == 0) return x - 1;
    else return nr;
}
int main()
{
    fin>>a>>n;
    long long x = Euler(n);
    fout<<putere(a, x - 1, n);
    return 0;
}