</pre><span style="white-space:pre"></span><pre name="code" class="java"><span style="font-size:18px;"> // 求最大公约数
// 分解:1.约数 2.公共 3.最大
public int getMaxDivisor(int a, int b) {
int maxNum = (a > b) ? a : b;
int minNum = (a > b) ? b : a;
int maxDivisor = 1;
for (int i = 1; i <= minNum; i++) {
if (maxNum % i == 0) {
if (minNum % i == 0) {
maxDivisor = i;
}
}
}
return maxDivisor;
}
// 求最大公约数
public int getMaxDivisor(int[] arr) {
int min = getMinValue(arr);
int maxDivisor = 1;
divisorLabel:
for (int i = 1; i <= min; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[j] % i != 0){
break divisorLabel;
}
}
if (i > maxDivisor) {
maxDivisor = i;
}
}
return maxDivisor;
}
// 求最大公约数:欧几里得算法(辗转相除法),递归实现
public int getMaxDivisorEuclidRecursion(int a, int b) {
if (a == 1 || b == 1) {
return 1;
}
int maxNum = (a > b) ? a : b;
int minNum = (a > b) ? b : a;
if (maxNum % minNum == 0) {
return minNum;
} else {
return getMaxDivisorEuclidRecursion(minNum, maxNum - minNum);
}
}
// 求最大公约数:欧几里得算法(辗转相除法),循环实现
public int getMaxDivisorEuclidLoop(int a, int b) {
int maxNum = (a > b) ? a : b;
int minNum = (a > b) ? b : a;
while (maxNum % minNum != 0) {
if (maxNum == 1 || minNum == 1) {
return 1;
}
a = minNum;
b = maxNum - minNum;
maxNum = (a > b) ? a : b;
minNum = (a > b) ? b : a;
}
return minNum;
}
// 获取最大值
public int getMaxValue(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
// 获取最小值
public int getMinValue(int[] arr) {
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}</span>
求最大公约数
最新推荐文章于 2019-10-19 19:04:24 发布