Java 已知三个正整数a,b,c。现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 请问满足上述条件的x的最小值是多少?数据保证x有解。 【输入】 一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。 【输出】 一个整数,即满足条件的x的最小值。 【输入样例】 300 262 205 【输出样例】 19
时间: 2024-03-21 18:40:59 浏览: 87
三级网络技术 上机试题 计算最大值
以下是更加高效的算法实现,时间复杂度为O(log(max(a,b,c))):
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int x = gcd(a, gcd(b, c));
int r1 = a % x;
int r2 = b % x;
int r3 = c % x;
int k = Math.min(Math.min(r1, r2), r3);
x += k == 0 ? 1 : (x - k);
System.out.println(x);
}
private static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
}
```
这个程序的实现原理是先求出a、b、c的最大公约数gcd,然后x的值就是gcd加上任意一个a、b、c的余数。因为x是最小的满足要求的除数,所以只需要将x增加到最小的不同余数处即可。具体实现中,我们先求出a、b、c除以gcd的余数r1、r2、r3,然后将x增加到最小的不同余数处。如果r1、r2、r3都是0,则从x=1开始尝试。
阅读全文