Cod sursa(job #2673742)

Utilizator JaguarKatStere Teodor Ioanin JaguarKat Data 17 noiembrie 2020 16:56:50
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
/*
void cmmdc(int a, int b, long long &x, long long &y)
{
    if(b == 0)
    {
        x = 1;
        y = 0;
    }
    else
    {
        long long x0,y0;
        cmmdc(b, a % b, x0, y0);
        x = y0;
        y = x0 - a / b * y0;
    }
}

int main()
{
    int a,n;
    long long x,y;
    fin >> a >> n;
    cmmdc(a,n,x,y);
    if(x <= 0)x = n + x % n;
    fout << x;
    return 0;
}*/

long long phi_de_n(long long n)
{
    int phin;
    phin = n;
    for(int i = 2; i * i <= n; ++i)
    {
        if(n % i == 0)
        {
            phin /= i;
            phin *= (i - 1);
            while(n % i == 0)
            {
                n /= i;
            }
        }
    }
    if(n != 1)
    {
        phin /= n;
        phin *= (n - 1);
    }
    phin -= 1;
    return phin;
}

int main()
{
    int a,n;
    fin >> a >> n;
    long long doru = 1;
    int phin = phi_de_n(n);
    for(int i = 1; i <= phin; i <<= 1)
    {
        if(i & phin)doru = (doru * a) % n;
        a = (a * a) % n;
    }
    fout << doru;
    return 0;
}