Pagini recente » Profil FlorinHaja | Cod sursa (job #2847583) | Clasament cex_ph_1 | Cod sursa (job #128434) | Cod sursa (job #2916841)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int a, n, idk = 1, b;
int mod;
/*void euler(long long n){
while(n > 1){
p = 0;
while(n % d == 0)
n /= d, p++;
if(p)
idk = idk * pow(d, p - 1) * (d - 1);
d++;
if(d * d > n)
d = n;
}
}*/
int phi(int n){
int answer = n;
for(int i=2; i<=n/i; i++)
if(n % i == 0){
answer -= answer / i;
while(n % i == 0)
n /= i;
}
if(n != 1)
answer -= answer / n;
return answer;
}
int exp_rap(int a, int n){
int p = 1;
a %= mod;
while(n){
if(n & 1)
p = (long long) p * a % mod;
a = (long long) a * a % mod;
n >>= 1;
}
return p;
}
bool prim(int x){
if(x == 0 || x == 1 || (x % 2 == 0 && x != 2))
return 0;
for(int d = 3; d * d <= x; d += 2)
if(x % d == 0)
return 0;
return 1;
}
int main(){
fin >> a >> n;
mod = n;
/*if(prim(n)){
fout << exp_rap(a, n - 2);
return 0;
}*/
b = phi(n) - 1;
fout << exp_rap(a, b);
}