Java已知三个正整数a,b,c。现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 请问满足上述条件的x的最小值是多少?数据保证x有解。 【输入】 一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。 【输出】 一个整数,即满足条件的x的最小值。 【输入样例】 300 262 205 【输出样例】 19
时间: 2024-03-21 13:40:49 浏览: 128
根据题目要求,我们需要求出a、b、c的余数相同的最小除数x。设a、b、c的余数都是r,那么我们可以列出以下方程组:
```
a = x * n1 + r
b = x * n2 + r
c = x * n3 + r
```
其中,n1、n2、n3都是正整数。我们可以将上面的三个式子相减,得到:
```
a - b = x * (n1 - n2)
b - c = x * (n2 - n3)
```
因为x是最小除数,所以n1-n2、n2-n3中必然有一个是最小的正整数k,那么我们就可以得到:
```
x = gcd(a - b, b - c) / k
```
其中gcd是求最大公约数的函数。因此,我们只需要求出a-b和b-c的最大公约数,然后除以k,就可以得到最小的满足要求的除数x。具体实现如下:
```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 k = Math.min(Math.min(a % (a - b), b % (b - c)), c % (a - c));
int x = gcd(a - b, b - c) / k;
System.out.println(x);
}
private static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
}
```
输入样例:
```
300 262 205
```
输出样例:
```
19
```
阅读全文