用两种算法求两个正整数的最大公约数和最小公倍数

算法1设计思路:辗转相除法
(1).判断两个数的大小,b比a小不用换,否则互换位置
(2)利用递归,大的数除以小的数,若余数不为0,则让较小的数(b)做被除数,余数(k)做除数,直到k=0,此时b为最大公约数
运用递归将求余之后的值作为b,将之前的b作为a直到求余值为0位置结束循环
(3)两数相乘/最大公约数就是最小公倍数

算法2设计思路:辗转相减法
(1)判断两个数的大小,b比a小不用换,否则互换位置
(2)用大的数减去小的数,若差不为0,则让较小的数(b)做被减数,差做减数,直到差为0,此时b为最大公约数
(3)两数相乘/最大公约数就是最小公倍数
算法1源代码:

import java.util.Scanner;
public class zuoye2_1 {

public static void main(String[] args){
	//定义两个整数型
	int a;
	int b;
	//调用java.util.Scanner可以获得从键盘输入的数字
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入一个数:");
	a=sc.nextInt();//nextInt()方法用来获取int数
	System.out.println("请输入另一个数:");
	b=sc.nextInt();
	/*调用后面的静态方法最大公约数Max(),最小公倍数Min(),
	 * 判断两个数的大小,b比a小不用换,否则互换位置
	 */
	if(a<b){
		int temp=b;
		b=a;
		a=temp;
	}
		System.out.println("最大公约数为:"+Max(a,b));
		System.out.println("最小公倍数为:"+Min(a,b));
}
//求两个数的最大公约数
public static int Max(int a,int b){
	//利用递归,大的数除以小的数,若余数不为0,则让较小的数(b)做被除数,余数(k)做除数,直到k=0,此时b为最大公约数
	//运用递归将求余之后的值作为b,将之前的b作为a直到求余值为0位置结束循环
	while(a%b!=0){
		int k=a%b;
		a=b;
		b=k;
	}
	return b;
}
//求两个数的最小公倍数
public static int Min(int a,int b){
	//最小公倍数就是两个数相乘再除以最大公约数
	return a*b/Max(a,b);
	
}


}

算法2源代码:

import java.util.Scanner;
public class zuoye2_2 {

public static void main(String[] args){
	//定义两个整数型
	int a;
	int b;
	//调用java.util.Scanner可以获得从键盘输入的数字
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入一个数:");
	a=sc.nextInt();//nextInt()方法用来获取int数
	System.out.println("请输入另一个数:");
	b=sc.nextInt();
	/*调用后面的静态方法最大公约数Max(),最小公倍数Min(),
	 * 判断两个数的大小,b比a小不用换,否则互换位置
	 */
	if(a<b){
		int temp=b;
		b=a;
		a=temp;
	}
		System.out.println("最大公约数为:"+Max(a,b));
		System.out.println("最小公倍数为:"+Min(a,b));
}
//求两个数的最大公约数
public static int Max(int a,int b){
	//利用递归,大的数除以小的数,若余数不为0,则让较小的数(b)做被除数,余数(k)做除数,直到k=0,此时b为最大公约数
	//运用递归将求余之后的值作为b,将之前的b作为a直到求余值为0位置结束循环
	while(a-b!=0){
		int temp=a-b;
		a=b;
		b=temp;
	}
	return b;
}
//求两个数的最小公倍数
public static int Min(int a,int b){
	//最小公倍数就是两个数相乘再除以最大公约数
	return a*b/Max(a,b);
	
}


}

算法1程序流程图:
这里写图片描述
算法2程序流程图:
这里写图片描述
算法一测试截屏:
在这里插入图片描述
算法二:测试截屏
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值