GCD(JAVA)
题目:
给定两个不同的正整数 a,b, 求一个正整数 k 使得 gcd(a+k,b+k) 尽可能 大, 其中 gcd(a,b) 表示 aa 和 bb 的最大公约数, 如果存在多个 k, 请输出所有满 足条件的 k 中最小的那个。
输入格式
输入一行包含两个正整数 a,b, 用一个空格分隔。
输出格式
输出一行包含一个正整数 k 。
样例输入
5 7
样例输出
1
评测用例规模与约定
对于 20% 的评测用例,a<b≤105;
对于 40% 的评测用例, a<b≤109;
对于所有评测用例, 1≤a<b≤1018 。
运行限制
最大运行时间:1s
最大运行内存: 512M
代码:
import java.util.Scanner; |
思路:
最大公约数因为a,b两数不相等,要加上一个相同的数k则可以求出的最大公约数必为a,b两数的差(代码也可以写成差的绝对值,我是进行比较了)。举个例子,5,7。
5和7加上同一个数因为他们的差值是2假设加上k后最大公约数可能为3,5+4=9,那么7就要加到12需要加5,就不满足条件了。
公约数我们求出来了就是差值,求最小k只需要用最大公约数减去a,b任意一个数除以最大公约数的余数即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大数据科技协会-zky!