Pagini recente » Cod sursa (job #346708) | Cod sursa (job #1918601) | Cod sursa (job #2557270) | Cod sursa (job #2654761) | Cod sursa (job #3239815)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
const int dim=2000001;
int vf[dim], mod;
void ciur(int n){
for(int i=1; i<=n; i++){
vf[i]=i;
}
for(int i=2; i<=n; i++){
if(vf[i]==i){
for(int j=1; j*i<=n; j++){
vf[j*i]=vf[j*i]/i*(i-1);
}
}
}
}
int exp(int n, int x){
int rez=1;
while(x>0){
if(x%2==1){
rez=(rez*n)%mod;
}
n=(n*n)%mod; x/=2;
}
return rez;
}
int main()
{
int n;
f>> n >> mod;
ciur(mod);
if(vf[mod]==mod-1){
g<< exp(n, mod-2);
} else {
g<< exp(n, vf[mod]);
}
return 0;
}