【Java编程基本功】(三)求两个数的最大公约数与最小公倍数

第九题

输入两个正整数 m 和 n ,求其最大公约数和最小公倍数。

穷举法:

输入两整数m和n(m>=n)。

1)令 i=n ;判断(m%i==0 && n%i==0)是否成立

2)如果成立则,求出最大公约数 i。

2)否则 i--,重复第2步。

代码:

import java.util.Scanner;

public class GCDAndLCM {

public static void main(String[] args) {

System.out.println("请输入两个整数");

Scanner in = new Scanner(System.in);

int m = in.nextInt();

int n = in.nextInt();

System.out.println(m+"和"+n+"的最大公约数为"+get_gcd(m, n));

System.out.println(m+"和"+n+"的最小公倍数为"+get_lcm(m, n));

}

public static int get_gcd(int m,int n){

int gcd=0;

int temp=0;

//令两个数中较大的数为 m

if(m

temp =n;

n=m;

m=temp;

}

for(int i=n;i>0;i--){

if(m%i==0&&n%i==0){

gcd=i;

break;

}

}

return gcd;

}

public static int get_lcm(int m,int n){

int lcm=0;

lcm = m*n/get_gcd(m, n);

return lcm;

}

}

辗转相除法:

输入两整数m和n(m>=n)

1)m%n 得出余数,

2)若余数为0,则 n 即为两数的最大公约数

3)若余数不为0,则 m=n,n=余数,再执行第1步。

代码:

import java.util.Scanner;

public class GCDAndLCM2 {

public static void main(String[] args) {

System.out.println("请输入两个整数");

Scanner in = new Scanner(System.in);

int m = in.nextInt();

int n = in.nextInt();

System.out.println(m+"和"+n+"的最大公约数为"+get_gcd(m, n));

System.out.println(m+"和"+n+"的最小公倍数为"+get_lcm(m, n));

}

public static int get_gcd(int m,int n){

int max,min;

//令两个数中较大的数为 m

max=(m>n)?m:n;

min=(m

if( max%min != 0){

return get_gcd(min, max%min);

}else{

return min;

}

}

public static int get_lcm(int m,int n){

int lcm=0;

lcm = m*n/get_gcd(m, n);

return lcm;

}

}

更相减损法:

输入两整数 m 和 n(m>=n):

1)若m-n=0,则m(或n)即为两数的最大公约数

2)若m-n≠0,则m=n,n=m-n 再回去执行第1步

代码:

import java.util.Scanner;

public class GCDAndLCM3 {

public static void main(String[] args) {

System.out.println("请输入两个整数");

Scanner in = new Scanner(System.in);

int m = in.nextInt();

int n = in.nextInt();

System.out.println(m+"和"+n+"的最大公约数为"+get_gcd(m, n));

System.out.println(m+"和"+n+"的最小公倍数为"+get_lcm(m, n));

}

public static int get_gcd(int m,int n){

//令两个数中较大的数为 m

if(m

m=m^n;

n=m^n;

m=m^n;

}

if( m-n != 0){

return get_gcd(n, m-n);

}else{

return n;

}

}

public static int get_lcm(int m,int n){

int lcm=0;

lcm = m*n/get_gcd(m, n);

return lcm;

}

}

能想到的方法全写出来了,小伙伴们要是有其他的方法欢迎留言讨论,今天这一道题顶过去五道,所以就到这里了。

在这边给小伙伴们留下几道题,小伙伴们自己思考尝试一下~,还是建议基础好的小伙伴去 杭电ACM 上注册个账号试试!上面的题目有很多哦~

1)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

2)求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

3)一个数如果恰好等于它的因子之和,这个数就称为 "完数",例如6=1+2+3。编程找出1000以内的所有完数。

4)一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

想学习Java的小伙伴注意啦!我整理了一套从最基础的Java入门级学习到Java框架内容,送给每一位想要学习Java的小伙伴,想要获取资料,可以关注微信公众号“速学Java”哦~这里是小白聚集地,欢迎初学和进阶中的小伙伴~

关注微信公众号:速学Java

【Java编程基本功】(三)求两个数的最大公约数与最小公倍数_第1张图片
【Java编程基本功】(三)求两个数的最大公约数与最小公倍数_第2张图片
【Java编程基本功】(三)求两个数的最大公约数与最小公倍数_第3张图片

你可能感兴趣的:(【Java编程基本功】(三)求两个数的最大公约数与最小公倍数)