Cod sursa(job #2282990)

Utilizator I_am_not_a_robotMr Domino I_am_not_a_robot Data 14 noiembrie 2018 20:06:11
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
#include <bits/stdc++.h>

typedef long long ll;
typedef long double ld;

using namespace std;

const string FILENAME = "inversmodular";

/// #define int long long

#define OpenIN() freopen((FILENAME+".in").c_str(),"r",stdin)
#define OpenOUT() freopen((FILENAME+".out").c_str(),"w",stdout)
#define OpenALL() OpenIN(), OpenOUT()
#define infoarena() OpenALL()

inline int phi (int n)
{
    int res = n;

    for (int i = 2; i * i <= n; i++)
    {
        bool entr = 0;

        while (n % i == 0)
        {
            n /= i;
            entr = 1;
        }

        if (entr)
        {
            res = res / i * (i - 1);
        }
    }

    if (n > 1)
    {
        res = res / n * (n - 1);
    }

    res--;
    return res;
}

int32_t main()
{
    ios_base::sync_with_stdio (0);
    cin.tie (0), cout.tie (0);
    infoarena();
    int a, mod;
    cin >> a >> mod;
    int up = phi (mod);
    int res = 1;

    while (up)
    {
        if (up & 1)
        {
            res = res * (long long) a % mod;
        }

        a = a * (long long) a % mod;
        up >>= 1;
    }

    cout << res << "\n";
    return 0;
}
/**

**/