题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
public class work06 {
public static void main(String[] args) {
//输入两个数字
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int number1 = sc.nextInt();
System.out.println("请输入第二个数字:");
int number2 = sc.nextInt();
ArrayList<Integer> al1 = new ArrayList<>();
al1 = findFactor(number1);
System.out.print("[");
for (Integer integer : al1) {
System.out.print(integer+" ");
}
System.out.println("]");
ArrayList<Integer> al2 = new ArrayList<>();
al2 = findFactor(number2);
System.out.print("[");
for (Integer integer : al2) {
System.out.print(integer+" ");
}
System.out.println("]");
//最大公因数:求交集,并且进行排序
ArrayList<Integer> al3 = new ArrayList<>();
al3.addAll(al1);
al3.retainAll(al2);
if(al3.size() == 0){
System.out.println("两个正整数没有最小公因数!");
}else{
if(al3.size()==1){
System.out.println("最大公因数为:"+al3.get(0));
}else{
for (int i = 1; i < al3.size(); i++) {
for (int j = 0; j < al3.size()-1; j++) {
if(al3.get(j)>al3.get(j+1)){
int k = al3.get(j);
al3.set(j, al3.get(j+1));
al3.set(j+1, k);
}
}
}
System.out.println("最小公因数为:"+al1.get(al1.size()-1));
}
}
//最小公约数:求去重并集,然后进行乘积运算
al1.removeAll(al2);
al1.addAll(al2);
// for (Integer integer : al1) {
// System.out.print(integer);
// }
if(al1.size()==0){
System.out.println("输入的数字没有最小公倍数!");
}else{
int k = al1.get(0);
for (int i = 0; i <al1.size()-1; i++) {
k = k * al1.get(i+1);
}
System.out.println("最小公倍数为"+k);
}
}
public static ArrayList<Integer> findFactor(int number){
ArrayList<Integer> al = new ArrayList<>();
for (int i = 2; i <= number; i++) {
if(number % i == 0){
al.add(i);
number = number / i;
i = 1;
}
}
return al;
}
}
/思路:最小公因数:先找出两个数字的公因数,然后进行取交集,通过排序找出最小的公因数
最小公倍数:公因数进行并集,算出乘积
难点1:求最大公因数,将ArrayList取交集并进行冒泡排序
难点2:求最小公倍数,求去重并集
本文介绍了一种使用Java编程语言实现的算法,该算法可以求解两个正整数的最大公约数和最小公倍数。通过创建一个名为work06的类,使用Scanner类获取用户输入的两个整数,然后调用findFactor方法找到每个数字的所有因子,再通过集合操作找出最大公约数和最小公倍数。

967

被折叠的 条评论
为什么被折叠?



