最小公倍数
既然想算最小公倍数,首先要清楚最小公倍数的求法,还有最大公约数的求法
最小公倍数*最大公约数=两数乘积
有了公式,我们很清楚可以知道了,只要有最大公约数就可以求出最小公倍数,因为两数乘积肯定是已知的,所以下面将讲解一下两个数如何求最大公约数。
1.辗转相除法(方法有很多,只介绍我会的,并且易懂的hhhh)
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:
用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
好吧,定义总是那么的复杂且难懂,下面直接一张表格,实现一遍辗转相除法,聪明的你肯定一遍就看会!
15 55 |
---|
15=15%55 |
10=55%15 |
5=15%10 |
0=10%5(最大公约数 5 ) |
如果你看懂了两个数如何求最小公倍数,那么求多个数的最小公倍数就不难了。
主要就是遵循一个准则:
先求前两个数的最小公倍,再用这个最小公倍数与下一个数求最小公倍数
再举一个例子求一下(5 7 15) 的最小公倍数
字迹可能
有些潦草,但是很认真哈哈哈哈哈哈!
如果大致过程会了,代码肯定是会了
代码实现:
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n-- > 0) {
int k = sc.nextInt();
int sum = 1;
for (int i = 0; i < k; i++) {
int p = sc.nextInt();
sum *= p / ff(sum, p);
}
System.out.println(sum);
}
}
public static int ff(int x,int y){
int r ;
while(y!=0){
r=x%y;
x=y;
y=r;
}
return x;
}
}
没有考虑大数的问题,根据题意选择long还是int。
下面介绍一个杭电oj的题目,因为你即使看的再懂不去实践也是不行的!
比如杭电的2028!
总结
大家共同学习,写错的地方请提出谢谢。