Objective c 目标c的最大公因数

Objective c 目标c的最大公因数,objective-c,math,Objective C,Math,我对目标c还不熟悉,我想知道是否有一种方法可以获得最大公因数 例如,gcf()这样你就明白了,没有现成的功能。由于Objective-C是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; }

我对目标c还不熟悉,我想知道是否有一种方法可以获得最大公因数


例如,
gcf()
这样你就明白了,没有现成的功能。由于Objective-C是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);
  }
}

没有内置的方法,但是该方法易于实现,并且非常有效


可以稍微提高效率。这个链接有C代码来实现它。

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


.

仅将damian86的答案转换为Objective-C风格(参考
self
假设对象的上下文,进行相应修改,您可以将其作为一个类别,等等):

-(int)最大公约数形式:(int)mn:(int)N
{
int t,r;
if(m
不要在头文件中定义函数,否则如果有多个文件包含它,则会出现链接错误。
#import "gcd.h"
int gcd (int a, int b){
    int c;
    while ( a != 0 ) {
        c = a; a = b%a; b = c;
    }
    return b;
}
-(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];

    }
}