

扩展欧几里得


public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();while (n-- > 0) {int a = in.nextInt();int b = in.nextInt();int[] m = exgcd(a, b);System.out.println(m[0] + " " + m[1]);}}private static int[] exgcd(int a, int b) {if (b == 0)return new int[]{1, 0};int[] result = exgcd(b, a % b);int x = result[0];int y = result[1];result[0] = y;result[1] = x - (a / b) * y;return result;}
}
线性同余方程


public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();while (n-- > 0) {int a = in.nextInt();int b = in.nextInt();int m = in.nextInt();int[] r = exgcd(a, m);if(b % r[2] != 0) {System.out.println("impossible");} else {System.out.println(r[0] * ((long) b / r[2]) % m);}}}private static int[] exgcd(int a, int m) {if (m == 0)return new int[]{1, 0, a};int[] result = exgcd(m, a % m);int x = result[0];int y = result[1];result[0] = y;result[1] = x - (a / m) * y;return result;}
}