Cod sursa(job #2036667)

Utilizator poppiancuPopp Iancu poppiancu Data 10 octombrie 2017 22:11:52
Problema Invers modular Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;
ifstream in ("inversmodular.in");
ofstream out ("inversmodular.out");
long long expow (long long b, long long e, long long mod)
{
    int ans=1;
    while (e>0)
    {
        if (e % 2)
        ans=ans*b%mod;
        b = b * b % mod;
            e/=2;
    }
    return ans;
}
int phi (int number)
{
    int phi=number,aux=number;
    bool is_divisor=false;
    while (aux%2==0)
    {
        aux/=2;
        is_divisor=true;
    }
    if (is_divisor)
    {
        phi=number/2;
    }
    is_divisor=false;
    for (int i=3;i<=sqrt(number);i++)
    {
        while (aux%i==0)
        {
            aux/=i;
            is_divisor=true;
        }
        if (is_divisor)
        {
            phi=phi/i*(i-1);
            is_divisor=false;
        }
    }
    return phi;
}

int main()
{
    long long a,n,x;
    in>>a>>n;
    x=expow(a,phi(n)-1,n);
    out<<x;
    return 0;
}