`
若是人间
  • 浏览: 76296 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

计算两个数的最大公因子

阅读更多

 

给定两个正整数mn,求它们的最大公因子,即能够同时整除mn的最大正整数。

E1.【求余数】 nm并令r为所得余数。(我们将有0<=r<n

E2.【余数为零?】若r=0,算法结束,n即为答案。

E3.【减少】置mß---n,nß-r,并返回步骤E1

 

 

package com.javaeye.rsrt;

/**
 * @description 求两个数的最大公因子
 * @author nishiting
 * @date 2010-9-15
 */
public class CommonFactor {

	/**
	 * @param arags
	 */
	public static int result=0;
	public static void main(String[] args) {

		int a = 77;
		int b = 21;
		
		CommonFactor cf = new CommonFactor();
		cal c = cf.new cal();
		c.calculate(a, b);
		System.out.println(a + "与" + b + "的最大公因子为:" + ((Integer)result).toString());
	}

	private class cal {

		public cal() {

		}

		public void calculate(int a, int b) {

			// 如果a比b小,那么a与b交换
			if (a < b) {
				int temp = a;
				a = b;
				b = temp;
			}

			if (a % b == 0) {
				result = b;
			} else {
				int r = a % b;
				a = b;
				b = r;
				calculate(a, b);
			}
		}
	}

}
5
21
分享到:
评论
8 楼 若是人间 2010-09-16  
lyw985 写道
public class Test{
	public static void main(String[] args) throws Exception {
		int a = 24, b = 42;
		System.out.println(get(a, b));
	}
	public static int get(int a, int b) {
		return a % b == 0 ? b : get(b, a % b);
	}
}

取模时要注意ab的大小关系,三目运算的效率应该跟if else没什么再样吧,这样写没什么意义
7 楼 lyw985 2010-09-16  
public class Test{
	public static void main(String[] args) throws Exception {
		int a = 24, b = 42;
		System.out.println(get(a, b));
	}
	public static int get(int a, int b) {
		return a % b == 0 ? b : get(b, a % b);
	}
}
6 楼 若是人间 2010-09-16  
anderkey 写道
// 如果a比b大,那么a与b交换  
            if (a < b) {  
                int temp = a;  
                a = b;  
                b = temp;  
            }  
错了吧?

呵呵,写错了
5 楼 anderkey 2010-09-16  
// 如果a比b大,那么a与b交换  
            if (a < b) {  
                int temp = a;  
                a = b;  
                b = temp;  
            }  
错了吧?
4 楼 若是人间 2010-09-15  
landman 写道
这里是递归,还有别的办法吧

知道了怎么算,程序怎么实现那是有多种方法的,三楼用while循环就不错
3 楼 landman 2010-09-15  
#include<stdio.h>

int main(void)
{
int m, n, k, tmp;
printf("Input 2 integers:\n");
scanf("%d %d", &m, &n);

if(m<n)
{
  tmp=m;
  m=n;
  n=tmp;
}

while(1)
{
  k=m%n;
  if(0==k)
  {
   printf("The largest public-factor: %d\n", n);
   return 0;
  }
  else
  {
   m=n;
   n=k;
  }
}
}
2 楼 landman 2010-09-15  
这里是递归,还有别的办法吧
1 楼 指尖旋律 2010-09-15  

相关推荐

    用 while 循环计算最大公因子

    在本篇博客中,作者通过使用`while`循环来实现计算两个数的最大公因子。这是一种基础的算法实现,通常在数学和计算机科学的入门课程中被教授。 首先,我们需要了解`while`循环的基本结构。`while`循环是一种条件...

    辗转相除法求最大公因子/最大公约数

    在本主题中,我们将深入探讨如何使用辗转相除法(也称为欧几里得算法)来求解两个数的最大公因子。 辗转相除法,源于古希腊数学家欧几里得的一项伟大发现,是一种高效计算最大公因子的方法。其基本思想是:对于任何...

    c语言求两个数的最大公约数

    本主题将深入探讨如何使用C语言来计算两个整数的最大公约数(Greatest Common Divisor,GCD)。最大公约数是两个或多个非零整数共有的最大的正因子,它是数论中的基本概念,对于理解和处理数字关系至关重要。 辗转...

    求任意两个数的最大公约数的个数最多的数

    最大公约数是指两个或多个整数共有的约数中最大的一个。 #### 应用场景: - 数学计算:在数学中经常需要对分数进行化简,此时就需要找到分子分母的最大公约数。 - 编程算法:在计算机编程中,最大公约数常常用于...

    JAVA编写两个数的最大公约数

    利用最大公约数,我们可以轻松计算出两个数的最小公倍数,公式为:`LCM(a, b) = |a * b| / GCD(a, b)`。 ### 结论 本文不仅详细解释了如何使用Java编写程序来找出两个数的最大公约数,还介绍了更高效的欧几里得...

    求n个数的最大公约数

    否则,我们初始化最大公约数为前两个数的结果,然后遍历数组的剩余部分,每次迭代都将当前最大公约数与下一个数进行计算,并更新结果。 要使用这个函数,你可以创建一个整数数组并传入其元素数量,例如: ```cpp ...

    算法:n个数的最大公约数

    例如,对于数字12和18,它们的最大公约数是6,因为6是12和18的最大公因子。最大公约数在数学和计算机科学中有着广泛的应用,例如简化分数、分解质因数以及优化计算过程。 **1. 递归求n个数的最大公约数** 递归是一...

    gcd.zip_gcd_python 公因子_python gcd

    除了手动实现,Python的标准库`math`也提供了一个内置函数`gcd()`,可以直接用来计算两个数的最大公因子。例如: ```python import math a = 12 b = 18 result = math.gcd(a, b) print(result) # 输出:6 ``` 在...

    信安数学基础实验_拉宾米勒素性检测_最大公因子_

    这篇结课报告探讨了两个关键的数学概念:最大公因子(Greatest Common Divisor, GCD)和拉宾-米勒(Rabin-Miller)素性检验。这两个概念在公钥密码系统如RSA中扮演着核心角色。 首先,我们来详细了解一下最大公因子...

    基于python求两个数最大公约数函数.pptx

    Python提供了内置的math模块,该模块包含一个名为gcd()的函数,专门用于计算两个整数的最大公约数。下面我们将详细探讨如何使用Python的math.gcd()函数以及其背后的数学原理。 首先,让我们来看一下如何导入math...

    信息安全它们的最大公因子

    1. **互素**:两个正整数如果它们的最大公因子是1,那么这两个数互素。39和63的最大公因子是3,因此它们不互素。 2. **欧几里德算法**:求两个正整数最大公因子(GCD)的一种有效方法。对于39和63,通过欧几里德...

    VB 求两个正整数的最大公约数

    在这个程序中,用户可以在文本框`txtNumber1`和`txtNumber2`中输入两个正整数,点击“计算”按钮(`btnCalculate`),程序将计算并显示这两个数的最大公约数到标签`lblResult`。 总之,VB提供了一个直观的编程环境...

    1.最小公倍数、最大公约数的c语言程序

    最大公约数(GCD)是指两个或多个非零整数的最大公共因子,它可以通过多种方法来计算,如欧几里得算法。欧几里得算法基于以下原理:对于任意两个正整数a和b(a&gt;b),它们的最大公约数等于a除以b的余数和b之间的最大...

    最小公倍数 最大公约数_最小公倍数_最大公约数_

    在编程中,可以编写函数或子VI来计算两个数的LCM,然后扩展到多个数的情况。 压缩包中的"最小公倍数.vi"同样是一个LabVIEW程序,可能实现了计算两个或多个数的最小公倍数的算法。这个程序可能包含了对输入数的循环...

    用C++求最大公约数最小公倍数的方法 .txt

    在主函数`main`中,首先从用户那里获取两个整数`x`和`y`,然后调用`yushu`函数计算这两个数的最大公约数,并存储在变量`z`中。接着,利用公式`LCM(x, y) = |x * y| / GCD(x, y)`计算最小公倍数,结果存储在变量`t`中...

    罗列素数&计算PI&最大公约数&最小公倍数

    接下来,**最大公约数(GCD)**是两个或多个非零整数的最大公共因子。在C#中,可以使用欧几里得算法(Euclidean algorithm)来找到GCD。该算法基于“两个数的较大数除以较小数的余数等于两数的GCD”的原理,不断重复...

    求最大公约数的三种算法

    分解质因数法是通过将两个数分别分解成质因数的乘积,然后找出共同的质因数,将这些质因数相乘得到最大公约数。例如,m=48=2^4 * 3,n=18=2*3^2,它们的最大公约数就是2和3的最小指数的乘积,即2^1 * 3^1 = 6。 3....

    最小公倍数最大公约数c#版

    以下是一个简单的C#函数,用于计算两个整数的最大公约数: ```csharp int GCD(int a, int b) { if (b == 0) return a; else return GCD(b, a % b); } ``` 计算最小公倍数则可以通过以下公式实现:两数乘积除以...

    最大公约数算法

    最大公约数(Greatest Common Divisor,GCD)算法是计算两个或多个整数的最大公共除数的数学方法。在编程领域,这个概念被广泛应用于优化算法、编码和解决数学问题。本文将深入探讨最大公约数算法的原理、常见的实现...

    最大公约数C#实现的demo

    在C#中,计算两个整数的最大公约数(Greatest Common Divisor, GCD)可以通过多种算法实现,其中最著名和高效的是欧几里得算法。欧几里得算法基于这样一个事实:两个整数的最大公约数等于其中较小的数和两数的差的...

Global site tag (gtag.js) - Google Analytics