编程初学者入门训练-小乐乐与欧几里得
2020-06-26 10:34
155 查看
题目描述
小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。
输入描述
每组输入包含两个正整数n和m。(1 ≤ n ≤ 10910^9109,1 ≤ m ≤ 10910^9109)
输出描述
对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。
示例1
输入
10 20
输出
30
示例2
输入
15 20
输出
65
代码实现
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); long n = scan.nextLong(); long m = scan.nextLong(); long z = m*n; long max = 0,min = 0; //如果m大于n,交换m与n的位置,使得m总是两者中的较小值 if(m>n){ long temp = n; n = m; m = temp; } //辗转相除法,计算最大公约数 long r = n%m; while(m!=0){ r = n%m; n = m; m = r; } max = n; min = z/max;//两数之积=最大公约数*最小公倍数 System.out.println(max+min); } }
辗转相除法
1.欧几里得算法又称辗转相除法,是指用于计算两个正整数a和b的最大公约数。计算公式gcd(a,b) = gcd(b,a mod b)。
2.如用辗转相除法求1997和615这两个正整数的最大公约数:以除数和余数反复做除法运算,当余数为0时,取当前算式除数为最大公约数。
1997/615=3……152
615/152 =4……7
152/7=21……5
7/5=1……2
5/2=2……1
2/1=2……0
至此,最大公约数为1
相关文章推荐
- 编程初学者入门训练-小乐乐排电梯
- 编程初学者入门训练-小乐乐定闹钟
- 编程初学者入门训练-小乐乐求和
- 编程初学者入门训练-小乐乐与进制转换
- 编程初学者入门训练-大小写转换
- 编程初学者入门训练-X形图案
- 编程初学者入门训练-班级成绩输入输出
- 编程初学者入门训练-包含数字9的数
- 编程初学者入门训练-菱形图案
- 编程初学者入门训练-最高身高
- 编程初学者入门训练-序列中整数去重
- 编程初学者入门训练-最高分与最低分之差
- 编程初学者入门训练-N个数之和
- 编程初学者入门训练-序列中删除指定数字
- 编程初学者入门训练-逆序输出
- 编程初学者入门训练-统计成绩
- 编程初学者入门训练-KiKi求质数个数
- 编程初学者入门训练-简单计算器
- 编程初学者入门训练-上三角矩阵判定
- 编程初学者入门训练-有序序列合并