您的位置:首页 > 其它

最大公约数及最小公倍数是个什么东西

2013-12-25 12:47 357 查看
源码地址

import java.util.Scanner;

/**
* @author cc
********************************************************************
*         1)最大公约数(最大公因数)就是几个数公有的因数中最大的一个。例12与18 12的因数有1,12,2,6,3,4
*         18的因数有1,18,2,9,6,3 公有的因数有1,2,3,6, 所以6就是12与18的最大公约数.
*
*         2)最小公倍数就是几个数公有的倍数中最小的一个。 例4和6 4的倍数有4,8,12,16,20,24,……
*         6的倍数有6,12,18,24,…… 4和6 公倍数 12,18……, 所以4和6的最小公倍数是12 。 源码地址
*         http://yunpan.cn/QD8k8biec66uN *******************************************************************
*/
public class commonMultipleDivisor {
/**
*
* @param args
* 最小公倍数=两数的乘积/最大公约数
* 最大公约数=两数的乘积/最小公倍数
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 0, b = 0;
int m;

Scanner in = new Scanner(System.in);
while (a <= 0 || b <= 0) {
System.out.println(" 请一次输入两个非零正整数 \n");
try {
a = in.nextInt();
b = in.nextInt();
} catch (Exception e) {
}
}
in.close();

m = fun2(a, b);
System.out.println("最大公约数为:" + m);
System.out.println("最小公倍数为:" + (a * b) / m);
}

public static int fun1(int a1, int b1) {
int c, temp;

if (a1 < b1) {
temp = a1;
a1 = b1;
b1 = temp;
}
c = a1 % b1;
while (c > 0) {
a1 = b1;
b1 = c;
c = a1 % b1;
}
return (b1);
}

/**
* 更相减损法
*  1.两个数都为偶数除2直到一个不为偶数
*  2.两数大的减小数,差与被减数进行大的减小的,直到差==被减数
*  3.第一步除了几次2,则用2的几次方*最后的差值 == 最大公约数
*  http://baike.baidu.com/link?url=ptGm72BthG_3TlM2GqkEAUhnsd15RFxMTMfHxlwAYXl2MobF1feLKepGyp6arNxw */
public static int fun2(int m1, int m2) {
int n = 0;
int temp = 0;
while (m1 / 2 == 0 && m2 / 2 == 0) {
m1 = m1 / 2;
m2 = m2 / 2;
n++;
}
while (m1 != m2) {
if (m1 < m2) {
m2 = m2 - m1;
} else {
m1 = m1 - m2;
}
}
if (0 != n) {
temp = 2 ^ n * m1;
} else {
temp = m1;
}
return temp;
}

}


import java.util.Scanner;
/**
* @author cc
********************************************************************
* 	 1)最大公约数(最大公因数)就是几个数公有的因数中最大的一个。例12与18
*	 12的因数有1,12,2,6,3,4
*	 18的因数有1,18,2,9,6,3
*	 公有的因数有1,2,3,6,
*	 所以6就是12与18的最大公约数.
*
*	 2)最小公倍数就是几个数公有的倍数中最小的一个。
*	 例4和6 4的倍数有4,8,12,16,20,24,……
*	 6的倍数有6,12,18,24,……
*	 4和6 公倍数 12,18……,
*	 所以4和6的最小公倍数是12 。
*		源码地址 http://yunpan.cn/QD8k8biec66uN *******************************************************************
*/
public class commonMultipleDivisor {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a, b, temp;
int m;
Scanner in = new Scanner(System.in);
a = in.nextInt();
b = in.nextInt();
if (a < b) {
temp = a;
a = b;
b = temp;
}
m = fun1(a, b);
System.out.println("最大公约数为:" + m);
System.out.println("最小公倍数为:" + (a * b) / m);
}

public static int fun1(int a1, int b1) {
int c;
c = a1 % b1;
while (c > 0) {
a1 = b1;
b1 = c;
c = a1 % b1;
}
return (b1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: