php专区

 首页 > php专区 > PHP进阶 > 算法 > 最大公约数问题的两种方法

最大公约数问题的两种方法

分享到:
【字体:
导读:
         摘要:最大公因数,又称最大公约数。是指[n(≧2)个自然数a1,a2,...,an]的最大公因数。通常有两种表示方式:它们的所有公因数中最大的那一个;如果自然数m是这n个自然数的公因数,且这n个数的任意公因数都是m的因数,就称m是这n个数的最大用因数。 ...

最大公约数问题的两种方法

最大公因数,又称最大公约数。是指 [n(≧2)个自然数 a1, a2, ..., an] 的最大公因数。通常有两种表示方式:

  • 它们的所有公因数中最大的那一个;
  • 如果自然数 m 是这 n 个自然数的公因数,且这 n 个数的任意公因数都是 m 的因数,就称 m 是这 n 个数的最大用因数。通常国内的记述方式为 [(a1, a2, ..., an)] ,国际通用的记号为 [g.c.d.(a1, a2, ..., an)]。

欧几里得算法(Euclidean Algorithm)(Euclid‘s 算法)就是通常所说的求最大公因数的辗转相除法。算法描述如下:

  1. 如果 a 除以 b 能整除,则最大公约数是 b;
  2. 否则,最大公约数等于 b 和 a % b的公约数。

代码实现如下:

#include 
int Euclidean(int parA, int parB)
{
    if (parB == 0) {
        return parA;
    } else {
        return Euclidean(parB, parA % parB);
    }
}
int main(void)
{
    int intA, intB;
    printf("Enter two number to calculate its GCD:n");
    scanf("%d %d", &intA, &intB);
    printf("The GCD of %d and %d is %dn", intA, intB, Euclidean(intA, intB));
    return 0;
}

或者

#include 
int Euclidean(int parA, int parB)
{
    return (!parB)?parA : Euclidean(parB, parA % parB);
}
int main(void)
{
    int intA, intB;
    printf("Enter two number to calculate its GCD:n");
    scanf("%d %d", &intA, &intB);
    printf("The GCD of %d and %d is %dn", intA, intB, Euclidean(intA, intB));
    return 0;
}

本文地址:http://www.nowamagic.net/librarys/veda/detail/451,欢迎访问原出处。

最大公约数问题的两种方法
分享到:
如何将一个数组的元素顺序打乱
如何将一个数组的元素顺序打乱 给定一个数组,要求把数组内元素的顺序随机打乱,然后输出,主要是要保证效率。 这个算法其实简单,首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。这样能确保每个元素在每个位置的概率都是1/n。代码如下...
图解堆排序Heap Sort算法
图解堆排序Heap Sort算法 在程序设计相关领域,堆(Heap)的概念主要涉及到两个方面: 一种数据结构,逻辑上是一颗完全二叉树,存储上是一个数组对象(二叉堆)。 垃圾收集存储区,是软件系统可以编程的内存区域。 本文所说的堆,指的是前者。 堆排序的时间复杂...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……