//辗转相除法求最大公因数和最小公倍数
import java.util.*;
publicclass Demo1{
publicstaticvoid main(String[]args) {
Scanner sc = new Scanner(System.in);
int a =sc.nextInt();
int b =sc.nextInt();
System.out.println(max_num(a,b));//调用方法,最大公因数
System.out.println(min_num(a,b));//调用方法,最小公倍数
}
privatestaticint max_num(int a, int b) {
int max,min;
max=(a>b)?a:b;
min=(a<b)?a:b;//判断max,min
if(max%min!=0){
// int a=max%min;求大数除以小数的余数
return max_num(min,max%min);
}
else
return min;
//最后余数为0,则除数(小数)是解
}
//假设x和y的最大公约数是m,最小公倍数是n,则xy=mn
privatestaticint min_num(int a, int b) {
return a*b/max_num(a,b);
}
}
求N个数的最小公倍数
方法一:辗转相除法求最大公因数和最小公倍数
import java.util.*;
publicclassdemo1{
publicstaticvoid main(String[] args) {
Scannersc = newScanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int a[]=newint[n];
int v=1;
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
}
for( int i=0;i<n;i++){
v=min_num(v,a[i]);
}
System.out.println(v);
}
}
privatestaticint max_num(int a, int b) {
int max,min;
max=(a>b)?a:b;
min=(a<b)?a:b;//判断max,min
if(max%min!=0){
// int a=max%min;求大数除以小数的余数
return max_num(min,max%min);
}
else
return min;
//最后余数为0,则除数(小数)是解
}
//假设x和y的最大公约数是m,最小公倍数是n,则xy=mn
privatestaticint min_num(int a, int b) {
int c=max_num(a,b);
int s=(a/c)*b;
return s;
}
}
方法二:max循环加1知道整除所有数
import java.util.*;
publicclass LCMP{
publicstaticvoid main(String[] args) {
// TODO Auto-generatedmethod stub
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
int n=scan.nextInt();
int a[]=newint[n]; //N个数放进数组
int max = 0;
for(int i=0;i<n;i++){
a[i]=scan.nextInt();
if(max<a[i]){
max=a[i];//求出最大值
}
}
//max+1直到除以所有的数整除!
for(int i=max;;i++){
boolean b=true;
for(int j=0;j<n;j++){
if(max%a[j]!=0){//max除以所有的数整除为真,反之;
b=false;
}
}
max++;
if(b){
System.out.println(i);
break;
}
}
}
}
}