Pagini recente » Cod sursa (job #1610561) | Cod sursa (job #2456729) | Cod sursa (job #2445225) | Cod sursa (job #2623918) | Cod sursa (job #1774385)
#include<stdio.h>
FILE *in, *out;
int exp(long long int n, long long int k)
{
if(k == 0) {
return 1;
}
if(k & 1 == 1) {
return (((exp(n, k / 2) * exp(n, k / 2))) * n);
} else {
return (exp(n, k / 2) * exp(n, k / 2));
}
}
long long int exp2(long long int n, long long int k, int mod)
{
if(k == 0) {
return 1;
}
if(k & 1 == 1) {
return (((exp2(n, k / 2, mod) * exp2(n, k / 2, mod)) % mod) * n) % mod;
} else {
return (exp2(n, k / 2, mod) * exp2(n, k / 2, mod)) % mod;
}
}
int fi(int n)
{
int apa, cn = n, toto = 1;
int trec = 0;
for(int i = 2; i * i <= n; i++) {
apa = 0;
while(cn % i == 0) {
cn = cn / i;
apa++;
}
if(apa > 0) {
toto = toto * exp(i, apa - 1) * (i - 1);
trec = 1;
}
}
//printf("%dhuehue\n", toto);
if(trec == 1) {
return toto;
} else {
return n - 1;
}
}
int main ()
{
int a, n;
in = fopen("inversmodular.in", "r");
out = fopen("inversmodular.out", "w");
fscanf(in, "%d%d", &a, &n);
int x = fi(n);
//printf("uhauhauahuha %d\n", x);
int y = exp2(a, x - 1, n);
fprintf(out, "%d", y);
fclose(in);
fclose(out);
return 0;
}