package com.demo;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/**
* Created by 莫文龙 on 2018/3/27.
*/
//输入两个正整数m和n,求最大的公约数和最小公倍数
public class Demo6 {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
//求出一个数的所有的质数
ArrayList<Integer> alist = new ArrayList<>();
ArrayList<Integer> blist = new ArrayList<>();
int num = a;
for (int i = 2 ; i <= num ; i ++) {
if (num % i == 0) {
alist.add(i);
num = num / i;
i = 1;
}
}
if (alist.size() == 1 || alist.size() == 0) alist.add(1);
int numb = b;
for (int i = 2 ; i <= numb ; i ++) {
if (numb % i == 0) {
blist.add(i);
numb = numb / i;
i = 1;
}
}
if (blist.size() == 1 || blist.size() == 0) blist.add(1);
Collections.sort(alist);
Collections.sort(blist);
//求最大公约数
int max = 1;
labe:for (int i = alist.size() - 1 ; i >= 0 ; i --) {
for (int j = blist.size() - 1 ; j >= 0 ; j --) {
if (alist.get(i) == blist.get(j)) {
max = alist.get(i);
break labe;
}
}
}
//最小公倍数
int min = a * b;
if (a < b) {
//a一定要是最大的
int temp = b;
b = a;
a = temp;
}
for (;;) {
int r = a % b;
if (r == 0) {
System.out.println(a + "和" + b + "的最小公倍数为:" + min / b);
break;
}else {
a = b;
b = r;
}
}
System.out.println("a和b的最大的公约数" + max);
}
}
50道编程题之06:输入两个正整数m和n,求最大的公约数和最小公倍数
最新推荐文章于 2022-12-26 23:21:46 发布