Cod sursa(job #2476825)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 19 octombrie 2019 11:44:13
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

struct pp{
    int n, p;
    int np = 1;
    pp(){}
    pp(int n, int p) : n(n), p(p){}
};

vector<pp> pps;
void spliterup(int a){
    for(int i = 2; i*i <= a; i++){
        pp x(i, 0);
        while(a % i == 0){
            x.p++;
            x.np *= i;
            a /= i;
        }
        
        if(x.p != 0){
            pps.push_back(x);
        }
    }
    
    if(a != 1){
        pp x(a, 1);
        x.np *= a;
        pps.push_back(x);
    }
}

int yesnt(long long a){
    for(auto b : pps){
        a *= (b.np - b.np/b.n);
    }
    for(auto b : pps){
        a /= b.np;
    }
    return a;
}

int kapow(int a, int p){
    int r = 1;
    for(int i = 0; i < p; i++){
        r *= a;
    }
    return r;
}

int main()
{
    int a, n;
    fin >> a >> n;
    
    spliterup(n-1);
    
    fout << kapow(a, yesnt(n-1));
    return 0;
}