反向迭代这些值。只需返回找到的第一个(最大)即可。就像是,
public static int largestDivisor(int n) { for (int i = n / 2; i >= 2; i--) { if (n % i == 0) { return i; } } return 1; }
或者,您可以对@WillemVanOnsem的答案进行一些改进,并以奇数开头,例如;
public static int largestDivisor(int n) { if (n % 2 == 0) { return n / 2; } final int sqrtn = (int) Math.sqrt(n); for (int i = 3; i <= sqrtn; i += 2) { if (n % i == 0) { return n / i; } } return 1; }