题目:求两个正整数的最大公约数和最小公倍数。
基本要求:程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
程序:
import java.util.Scanner;
//计算两个整数的最大公约数、最小公倍数的方法一
public class Way1 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("请输入两个整数:");
int m=in.nextInt();
int n=in.nextInt();
int max=0,min= 0;//定义最大公约数、最小公倍数
if(m>n)//将m记为两数间的较小值
{
int t=m;
m=n;
n=t;
}
for(int i=1;i<=m;i++)
{
if(m%i==0&n%i==0)
max=i;
}
min=m*n/max;
System.out.println("最大公约数为:"+max+",最小公倍数为:"+min);
}
}
程序:
import java.util.Scanner;
//辗转相除法
//计算两个整数的最大公约数、最小公倍数的方法二
public class Way2{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("请输入两个整数:");
int m=in.nextInt();
int n=in.nextInt();
int z=m*n;//计算此时的m*n
int max=0,min= 0;//定义最大公约数、最小公倍数
if(m>n)//将m记为两数间的较小值
{
int t=m;
m=n;
n=t;
}
int r=n%m;
while(m!=0)
{ r=n%m;
n=m;
m=r;
}
max=n;
min=z/n;
System.out.println("最大公约数为:"+max+",最小公倍数为:"+min);
}
}
程序:
import java.util.Scanner;
//大数翻倍法
//计算两个整数的最大公约数、最小公倍数的方法三
public class Way3 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("请输入两个整数:");
int m=in.nextInt();
int n=in.nextInt();
int max=0,min= 0;//定义最大公约数、最小公倍数
if(m>n)//将m记为两数间的较小值
{
int t=m;
m=n;
n=t;
}
int a=m;int b=n;
if(n%m==0){
max=m;
min=n;
}
int c;
while((c=n%m)!=0){
n=m;
m=c;
}
//两数互质
if(m==1){
max=m;
min=a*b;
}
if(b%a!=0&&m!=1){
int i=2;
while(b*i%a!=0){
i=i+1;
}
min=b*i;
max=b*a/min;
}
System.out.println("最大公约数为:"+max+",最小公倍数为:"+min);
}
}
程序:
import java.util.Scanner;
//计算三个整数的最大公约数、最小公倍数
public class Way4 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("请输入三个整数:");
int m=in.nextInt();
int n=in.nextInt();
int q=in.nextInt();
int max=0,min= 0;
int Max=0,Max2=0,Min= 0;//定义最大公约数、最小公倍数
//求m,n 的最大公约数、最小公倍数
if(m>n)//将m记为两数间的较小值
{
int t=m;
m=n;
n=t;
}
for(int i=1;i<=m;i++)
{
if(m%i==0&n%i==0)
max=i;
}
min=m*n/max;
//求max和q的最大公约数
int l=q;
if(q>max)//将q记为两数间的较小值
{
int t=max;
max=q;
q=t;
}
for(int i=1;i<=q;i++)
{
if(q%i==0&max%i==0)
Max=i;
}
//求min和q的最小公倍数
if(l>min)//将l记为两数间的较小值
{
int t=l;
l=min;
min=t;
}
for(int i=1;i<=l;i++)
{
if(l%i==0&min%i==0)
Max2=i;
}
Min=l*min/Max2;
System.out.println("最大公约数为:"+Max+",最小公倍数为:"+Min);
}
}
调试及测试截屏:
输入两数为互质数:
输入两数为倍数关系:
输入两数非倍数关系且非互质数:
输入三个数: