Cod sursa(job #3250556)

Utilizator mariusharabariMarius Harabari mariusharabari Data 21 octombrie 2024 23:45:02
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
long long int n, a, x;

long long int lgput(long long int b, long long int e){
    if(e==0) return 1;
    if(e==1) return b;
    if(e%2==0) return lgput(b*b, e/2);
    return b*lgput(b*b, e/2);
}

long long int ind_eul(long long int k){
    int d=0;
    long long int p=1, i;
    while(k%2==0){
        k/=2;
        d++;
    }
    if(d!=0) p*=lgput(2, d-1);
    for(i=3;i*i<=k;i+=2){
        d=0;
        while(k%i==0){
            k/=i;
            d++;
        }
        if(d!=0) p*=(i-1)*lgput(i, d-1);
    }
    p*=k-1;
    return p;
}
int main(){
    fin>>a>>n;
    x=lgput(a,ind_eul(n)-1);
    fout<<x;
    return 0;
}