Cod sursa(job #2732412)

Utilizator emanuel2186Lugojan Emanuel emanuel2186 Data 28 martie 2021 22:38:52
Problema Invers modular Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
long long N, M;
int prim(long long x)
{
    if(x < 0)
        return 0;
    if(x == 2)
        return 1;
    if(x % 2 == 0)
        return 0;
    for(int d = 3; d * d <= x; d += 2)
    {
        if(x % d == 0)
            return 0;
    }
    return 1;
}
int ridic(long long x, long long p, long long m)
{
    long long rez = 1;
    while(p > 0)
    {
        if(p % 2 == 1)
            rez = ( (rez % m) * (x % m) ) % m;
        x = ( (x % m) * (x % m) ) % m;
        p /= 2;
    }
    return rez;
}
void citire()
{
    fin>>N>>M;
    long long putere;
    if(prim(M) == 1)
    {
        putere = M - 2;
    }
    else
        putere = M - 1;
    fout<<ridic(N, putere, M);
}
int main()
{
    citire();
    return 0;
}
/***

Daca N este prim ridicam la puterea N - 2
Contrar ridicam la puterea N - 1;
*/