Java 对于这个问题是否有一个优化的方法?
给定整数N和M,求有序对(a,b)的数量,使1≤a我可以看到一些改进。首先,因为一个不相关的,但你不应该接受例外。我喜欢你的方法,但仍然没有那么优化。谢谢你的帮助。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
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;
}