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,求最大的公約數和最小公倍數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.