Cod sursa(job #1490844)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 24 septembrie 2015 11:32:42
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");

int lgput(int a, int b, int mod)
{
    if(b == 1)
        return a % mod;
    if(b == 0)
        return 1;
    int rez = lgput(a, b/2, mod) % mod;
    if(b % 2 == 0)
        return (1LL * rez * rez) % mod;
    else
        return (1LL * (1LL * rez * rez) % mod) * a % mod;
}

int phi(int n) {
    int nrdiv = 1;
    for(int i = 2; i * i <= n; i++) {
        if(n % i == 0) {
            ++ nrdiv;
            if(n / i != i)
                ++ nrdiv;
        }
    }
    return n - nrdiv;
}

int main()
{
    int a, n;
    in >> a >> n;
    out << lgput(a, phi(n) - 1, n);
    return 0;
}