Java 对于这个问题是否有一个优化的方法?

Java 对于这个问题是否有一个优化的方法?,java,optimization,Java,Optimization,给定整数N和M,求有序对(a,b)的数量,使1≤a我可以看到一些改进。首先,因为一个不相关的,但你不应该接受例外。我喜欢你的方法,但仍然没有那么优化。谢谢你的帮助。 import java.util.Scanner; class test { public static void main(String[] args) { try { Scanner scn = new Scanner(System.in); int te

给定整数N和M,求有序对(a,b)的数量,使1≤a我可以看到一些改进。首先,因为一个不相关的,但你不应该接受例外。我喜欢你的方法,但仍然没有那么优化。谢谢你的帮助。
import java.util.Scanner;

class test {
    public static void main(String[] args) {
        try {
            Scanner scn = new Scanner(System.in);
            int testCase = scn.nextInt();
            for (int i = 0; i < testCase; i++) {
                int n = scn.nextInt();
                int m = scn.nextInt();
                int count = 0;
                for (int j = 1; j < n; j++) {
                    for (int k = j + 1; k <= n; k++) {
                        if (((m % j) % k) == ((m % k) % j)) {
                            // System.out.print(j+" "+k);
                            // System.out.println();
                            count++;
                        }

                    }
                }
                System.out.println(count);

            }
        } catch (Exception e) {
            return;
        }
    }
}
class Test {
public static void main(String[] args) {
    try {
        Scanner scn = new Scanner(System.in);
        int n = scn.nextInt();
        int m = scn.nextInt();
        int count = 0;
        for (int j = 1; j < n; j++) {
            for (int k = j + 1; k <= n; k++) {
                if (((m % j) % k) == ((m % k) % j)) {
                    //System.out.print(j+" "+k);
                    //System.out.println();
                    count++;
                }

            }
        }
        System.out.println(count);
        count=0;
        for (int b = 1; b <= n; b++) {
            //System.out.println((m/b)*b);
            count += countDivisors(m, b);
        }
        System.out.println(count);

    } catch (Exception e) {
        return;
    }
}

private static int countDivisors(int m,  int b) {
    int count=0;
    int val = ((m/b)*b);
    int mi = Math.min((int)Math.sqrt(val), b-1);
    if(mi == 0)
        return (b-1);
    for(int a=1; a<=mi; a++) {
        if(val % a == 0) {
            count++;
            int aa=val/a;
            if(aa>a && aa < b) {
                count++;
            }
        }
    }
    return count;
}