Cod sursa(job #2038211)

Utilizator poppiancuPopp Iancu poppiancu Data 13 octombrie 2017 15:09:08
Problema Invers modular Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 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 r=1;
    while (e>0)
    {
        if (e%2)
            r=r*b%mod;
        b=b*b%mod;
        e/=2;
    }
    return r;
}
int phi (int number)
{
    int phi=number-1,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)+3;i+=2)
    {

        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;
}