辗转相除->GCD-> 裴蜀定理->两数互质
辗转相除是:
简单来说,辗转相除就像是用一把尺子不断去量取两个数,每次都是用较小的那个数去量较大的数,然后记录下余数。当余数变成零时,那么较小的那个数就是这两个数的最大公约数。
GCD
int gcd(int a, int b) { // 循环实现最大公约数算法
int k = 0; // 用于存储余数的变量
do {
k = a % b; // 得到a除以b的余数
a = b; // 根据辗转相除法,把b的值赋给a
b = k; // 把余数赋给b
} while (k != 0); // 当余数为0时,退出循环
return a; // 返回a作为最大公约数
}
裴蜀定理
给定的两个整数a和b,存在整数x和y,使得它们的最大公约数(GCD)等于ax + by。
从这个定理推导出,如果GCD(a, b)等于1,那么a和b是互质的,因为它们没有共同的正因子。
一个不严谨的推导:
- 假设a和b的最大公约数等于1,即GCD(a, b) = 1。
- 根据裴蜀定理,存在整数x和y,使得1 = ax + by。
- 现在考虑a和b的因子。如果a和b有共同的正因子(大于1的因子),那么它们的最大公约数不可能等于1。因为最大公约数是它们共同的因子中最大的一个。
- 由于GCD(a, b)等于1,说明a和b没有共同的正因子,除了1。
- 因此,a和b没有共同的正因子,它们是互质的。
两数互为质数
public static boolean areCoPrimes(int num1, int num2) {
int greatestCommonDivisor = gcd(num1, num2);
return greatestCommonDivisor == 1; }