Cod sursa(job #3254669)
Utilizator | Data | 8 noiembrie 2024 13:49:19 | |
---|---|---|---|
Problema | Invers modular | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.46 kb |
#include <iostream>
#include<fstream>
using namespace std;ifstream fin("inversmodular.in");ofstream fout("inversmodular.out");
long long a,b;
int calc(int n){int ph=n;for(int i=2;i*i<=n;i++)if(n%i==0){while(n%i==0)n/=i;
ph=ph/i*(i-1);}if(n>1)ph=ph/n*(n-1);
return ph;}
int exp(int a,int b,int mod){int rez=1;
while(b>0){if(b&1){rez=(1ll*rez*a)%mod;b--;}
a=(1ll*a*a)%mod;b/=2;
}return rez;
}
int main()
{fin>>a>>b;fout<<exp(a,calc(b)-1,b);
return 0;
}