/*
* 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
*/
辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。
*/
/*
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。
*/
package com.zhang.test;
import java.util.Scanner;
public class TestDemo07 {
public static void main(String[] args) {
System.out.println("请输入第一个正整数:");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println("请输入第二个正整数:");
int b = scanner.nextInt();
int gcd = get_gcd(a, b);
System.out.println("最小公倍数是" + gcd);
int lcm = a * b / gcd;
System.out.println("最大公约数是" + lcm);
scanner.close();
}
// 最大公约数
public static int get_gcd(int n1, int n2) {
int gcd = 0;
if (n1 < n2) { // 交换n1、n2的值
n1 = n1 + n2;
n2 = n1 - n2;
n1 = n1 - n2;
}
if (n1 % n2 == 0) {
gcd = n2;
}
while (n1 % n2 > 0) {
n1 = n1 % n2;
if (n1 < n2) {
n1 = n1 + n2;
n2 = n1 - n2;
n1 = n1 - n2;
}
if (n1 % n2 == 0) {
gcd = n2;
}
}
return gcd;
}
}
//最大公约数
// public static int get_gcd(int num1,int num2){
// int result = 1;
// int tmp = num1>num2? num2 :num1;
// for (int i = 2; i <= tmp; i++) {
// if(num1%i == 0 && num2%i == 0){
// result = i*result;
// num1 = num1/i;
// num2 = num2/i;
// i=1;
// }
// }
// return result;
// }
/*