题目:求两个正整数的最大公约数和最小公倍数。
方法一:
基本思路:
先求出n个数中最大的那个数,如果这个数可以整除所有的数,则这是最小公倍数
如果不能则令max+1直到找到可以整除所有的数的那个数为止
程序流程图如下:
package jj;
import java.util.*;
public class Bei3 {
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
System.out.println("为保证结果可靠,请输入的数字均在200以内");
while(sc.hasNext()){
int n=sc.nextInt(); //设置输入的数字个数
int a[]=new int[n];
int max=0;
int min=200;
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
if(max<a[i]){
max=a[i]; //先找出这n个数的那个最大数
}
if(min>a[i]){
min=a[i]; //先找出这n个数中最小的那个数
}
}
for(int i=max;;i++){
boolean b=true; //设置标记
for(int j=0;j<n;j++){
if(max%a[j]!=0){
b=false;
//只要有一个数不能整除max则令标记为false
}
}
max++;
if(b){ //如果标记为true说明该max可以整除这n个数
//则max为最小公倍数
System.out.println("最小公倍数为 "+i);
break; //跳出循环
}
}
for(int i=min;;i--){
boolean c=true;
for(int j=0;j<n;j++){
if(a[j]%min!=0){
c=false;//只要有一个数不能把min整除就标记false
}
}
min--;
if(c){//如果标记为true说明该min可以被这n个数整除
//则min为最大公约数
System.out.println("最大公约数为: "+i);
break; //跳出循环
}
}
}
}
}
方法2:
基本思路:
定义a,b等于1;先判断两个数是否为倍数关系,如果是,则大数为最小公倍数,小数为最大公因数;如果不是,从2 开始循环寻找公因子,每找到一个即乘以公约数变量a与公倍数变量b,并把原来的两个数除以共同的因子,最大公约数和最小公倍数分别为a,b
程序流程图:
package jj;
import java.util.Scanner;
public class Bei {
public static void main(String[] args)
{
//从控制台输入两个数据
Scanner sc= new Scanner(System.in);
int m;
int n;
// int m=Integer.parseInt(args[0]);
// int n=Integer.parseInt(args[1]);
while(sc.hasNext()){
m=sc.nextInt();
n = sc.nextInt();
int a = 1 ;
int b = 1;
if (m > 0 && n >0)
{
if (m % n == 0 || n % m == 0) //先判定这两个数是否为倍数关系
{
if (m >= n)
{
System.out.println("最大公约数为" + n);// 小数为最大公约数
System.out.println("最小公倍数为" + m);// 大数为最小公倍数
}
else
{
System.out.println("最大公约数为" + m);// 小数为最大公约数
System.out.println("最小公倍数为" + n);// 大数为最小公倍数
}
}
else
{
for (int i = 2; i <= m ; i ++ )//从2开始循环寻找两数共同的因子,
{
if (m % i == 0 && n % i == 0)
{
a *= i;//每找到一个即乘以公约数变量a与公倍数变量b
b *= i;
m /= i;//并把原来的两个数除以共同的因子
n /= i;
i = 1;//continue出来要执行for的结束语句i++,所以下一次循环i依然从2开始 continue;
}
else if(m == i && (m % i != 0 || n % i != 0))
{
b = b * m * n;
System.out.println("最大公约数为" + a);
System.out.println("最小公倍数为" + b);
}
}
}
}
else
{
System.out.println("输入错误");
}
}
}
}
方法3:
基本思路:
定义方法bei计算最大公约数和最小公倍数,循环出两个数的最大公因子,通过公式m*n/max计算最小公倍数,输入数据,调用方法bei,得到结果。
程序流程图:
package jj;
import java.util.Scanner;
public class Bei2 {
public static void bei(int n,int m){ //定义方法bei计算最大公约数和最小公倍数
int max=1;int min=1;
for(int i=2;i<=n;i++) //循环出两个数最大的公因子
{
if((n%i==0)&&(m%i==0))
{
max=i;
}
}
min=m*n/max; //计算最小公倍数
System.out.println("最大公约数是:"+max);
System.out.println("最小公倍数是:"+min);
}
public static void main(String[] args){//输入两个数,计算最小公倍数和最大公约数
System.out.println("请输入两个数: ");
Scanner sc =new Scanner(System.in);
while(sc.hasNext()){
int a=sc.nextInt();
int b=sc.nextInt();
bei(a,b);
continue;
}
}
}