HOMEWORK06 最大公因数与最小公倍数

本文介绍了一种使用Java编程语言实现的算法,该算法可以求解两个正整数的最大公约数和最小公倍数。通过创建一个名为work06的类,使用Scanner类获取用户输入的两个整数,然后调用findFactor方法找到每个数字的所有因子,再通过集合操作找出最大公约数和最小公倍数。

题目:输入两个正整数 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:求最小公倍数,求去重并集

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值