一、问题描述
求N个数的最大公约数和最小公倍数。用java实现。
二、问题分析与设计
使用辗转相除法(欧几里得法),[求最大公约数的4种常用算法:] (https://blog.csdn.net/Brilliance_panpan/article/details/88372432)
先前两个数进行求最大公约数,再通过循环本次的数与之前求得的最大公约数再进行求最大公约数。
N个数的最小公倍数=这N个数相乘/(这N个数的最小公倍数的N-1次方)
三、完整代码
public class Max {
int factor(int a,int b)
{
if(a%b==0)
return b;
else
return
factor(b,a%b);
}
}
import java.util.*;
public class maxFactor {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("请输入要输入正整数的个数:");
int []in =new int[20]; //定义数组长度
int n; //数入的正整数的个数
n=input.nextInt();
System.out.println("请输入N个正整数:");
int a; //接收输入的数字
int minMultiple = 1; //求公倍数时n个数字的相乘
int chushu; //最大公约数的n-1次方
for(int i=0;i<n;i++) //循环输入数字,并求这几个数字的相乘
{
a=input.nextInt();
in[i]=a;
minMultiple*=in[i];
}
Max Max =new Max(); //创建Max类的对象
int maxFactor=Max.factor(in[0],in[1]);
for(int j=2;j<n;j++) //从第3个数字开始与前两个数字的最大公约数,循环求;
{
maxFactor=Max.factor(maxFactor, in[j]); //先求前两个数字的最大公约数
}
System.out.println("这"+n+"个数的最大公约数为:"+maxFactor);
chushu=(int)Math.pow(maxFactor, n-1);
System.out.println("这"+n+"个数的最小公倍数为:"+minMultiple/chushu);
}
}