Cod sursa(job #3255226)

Utilizator ArthurrrfubinacaARthur Paun Arthurrrfubinaca Data 9 noiembrie 2024 18:46:46
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define ll long long
#define LL long long
using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");

ll calc(ll x)
{
    ll nr = x;
    for(ll i=2 ; i * i <= x ; i++)
    {
        if (x % i == 0)
        {
            while(x % i == 0)
                x/=i;
            nr=(nr / i) * (i - 1);
        }
    }
    if(x!=1)
        nr = nr / x * (x - 1);
    return nr;
}

LL getphi(LL nr)
{
	LL cur = nr;
	for(LL i = 2;i * i <= nr; ++i)
	{
		if (nr % i == 0)
		{
			while(nr % i == 0)nr /= i;
			cur = (cur / i) * (i - 1);
		}
	}
        if (nr != 1) cur = cur / nr * (nr - 1);
	return cur;
}

int main()
{
    ll phi , m , a , n , sol=1;
    fin >> a >> n;
    m = calc(n) - 1;
    cout<<m;
    phi = getphi(n) - 1;
    cout<<" "<<phi;
    while(m)
    {
        if(m % 2)
            sol = sol * a % n;
        a = a * a % n;
        m/=2;
    }
    fout<<sol;
    return 0;
}