目标c的最大共同因素

时间:2011-03-11 23:22:48

标签: objective-c math

我是目标c的新手,我想知道是否有最大公因子的方法

例如

gcf()所以你明白了

4 个答案:

答案 0 :(得分:8)

没有开箱即用的功能。由于Objective-C是C的超集,因此您可以获取现有库或一组函数,并在必要时包含它。

基于http://www.idevelopment.info/data/Programming/data_structures/c/gcd/gcd.c,您可能会这样做:

// gcd.h
int gcd(int m, int n);

// gcd.c
int gcd(int m, int n) {

  int t, r;

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

  r = m % n;

  if (r == 0) {
    return n;
  } else {
    return gcd(n, r);
  }
}

每当您希望使用gcd函数时,请包含该文件:

#import "gcd.h"

答案 1 :(得分:4)

没有内置方法,但Euclidean algorithm易于实现且效率很高。

The binary GCD algorithm可以稍微提高效率。此链接具有实现它的C代码。

答案 2 :(得分:3)

到目前为止,我遇到的最优雅的解决方案(当然是非递归的):

int gcd (int a, int b){
    int c;
    while ( a != 0 ) {
        c = a; a = b%a; b = c;
    }
    return b;
}

Source

答案 3 :(得分:0)

将damian86的答案放入Objective-C样式(对self的引用假定一个对象的上下文,相应地修改,你可以将它作为一个类别等):

-(int)greatestCommonDivisorM:(int)m N:(int)n
{
    int t, r;

    if (m < n) {
        t = m;
        m = n;
        n = t;
}
    r = m % n;

    if (r == 0) {
        return n;
    } else {
        return [self greatestCommonDivisorM:n N:r];

    }
}