您的位置:首页 > 编程语言

编程初学者入门训练-小乐乐与欧几里得

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: