Cod sursa(job #1404681)

Utilizator 4ONI2015oni2015 4ONI2015 Data 28 martie 2015 14:14:55
Problema Invers modular Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;
int n, N, a, phi, i;
int ExpLog(int b, int e)
{
    int sol = 1;
    for(int i = 1; i <= e; i <<= 1)
    {
        if(i & e)
            sol = (1ll * sol * b) % N;
        b = (1ll * b * b) % N;
    }
    return sol;
}
int main()
{
    freopen("inversmodular.in", "r", stdin);
    freopen("inversmodular.out", "w", stdout);
    scanf("%d%d", &a, &n);
    N = n;
    phi = 1;
    for(i = 2; i * i <= n; i++)
        if(n % i == 0)
        {
            n /= i;
            phi *= (i - 1);
            while(n % i == 0)
            {
                phi *= i;
                n /= i;
            }
        }
    if(n > 1)
        phi *= (n - 1);
    printf("%d\n", ExpLog(a, phi - 1));
    return 0;
}