>>251
3 に 2をどう使ったらいいかわからんかったので,拡張GCDを新たに書いて使った.
わざわざプログラム三つ書くの面倒だったから適当に直してください.

void f(int P, int X) { /* 問1 */
  int Y;
  for (Y = 1; (X * Y) % P != 1; ++Y);
  printf("Y = %d\n", Y);
}
int gcd(int X, int Y) { /* 問2 */
  return Y > 0 ? gcd(Y, X % Y) : X;
}
/* 問3 で使う拡張GCD:
 * aX + bY = gcd(X,Y) なる gcd(X,Y), a, b を求める */
int extgcd(int X, int Y, int *a, int *b) {
  int g = X; *a = 1, *b = 0;
  if (Y > 0) g = extgcd(Y, X % Y, b, a), *b -= (X / Y) * (*a);
  return g;
}
void g(int P, int X) { /* 問3 */
  int Y, dummy;
  extgcd(X, P, &Y, &dummy);
  while (Y < 0) Y += P;
  printf("Y = %d\n", Y % P);
}