Cod sursa(job #2371946)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 6 martie 2019 20:24:13
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
using namespace std;
int v[1000005];
int euler(int x){
    int nr=x;
    int d=2;
    while(d*d<=x){
        int ex=0;
        while(x%d==0){
            x/=d;
            ++ex;
        }
        if(ex>0)
            nr=1LL*nr*(d-1)/d;
        ++d;
    }
    if(x>1)
        nr=1LL*nr*(x-1)/x;
    return nr;
}
int lg_pow(long long a,long long b,int MOD){
    long long ans=1,p=a;
    for(long long i=1;i<=b;i<<=1){
        if(i&b)
            ans=ans*p%MOD;
        p=p*p%MOD;
    }
    return ans;
}
int main(){
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    int a,n;
    scanf("%d %d",&a,&n);
    printf("%d\n",lg_pow(a,euler(n)-1,n));
    return 0;
}