Cod sursa(job #2878147)

Utilizator KarinaDKarina Dumitrescu KarinaD Data 25 martie 2022 21:30:11
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int main () {
    
    int a, p, x, phi = 1, e, d, cp;
    
    fin >> a >> p;
    
    cp = p;
    
    d = 2;
    while ( d * d <= p ){
        
        e = 1;
        
        while ( p % d == 0 ){
            e = e * d;
            p = p / d;
        }
        
        if ( e > 1 )
            phi = phi * ( e / d ) * ( d - 1 );
        d++;
    }
    
    if ( p > 1 )
        phi = phi * ( p - 1 );
    
    x = 1;
    while ( phi > 0 ) {
        if ( phi % 2 == 1 ) {
            x = x * a % cp;
            phi--;
        }
        x = x * a % cp;
        phi = phi / 2;
    }
    
    fout << x;
    
    return 0;
}