Наибольший общий фактор на цель с - PullRequest
7 голосов
/ 12 марта 2011

Я новичок в цели c, и я хотел бы знать, есть ли метод для наибольшего общего множителя

gcf() например, чтобы вы поняли

Ответы [ 4 ]

8 голосов
/ 12 марта 2011

Нет встроенной функции.Так как 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"
4 голосов
/ 12 марта 2011

Встроенного метода не существует, но евклидов алгоритм прост в реализации и достаточно эффективен.

Бинарный алгоритм GCD может быть немного более эффективным. Эта ссылка содержит код C, реализующий ее.

3 голосов
/ 16 марта 2014

На сегодняшний день самое элегантное решение, с которым я столкнулся (конечно, без рекурсии):

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

Источник .

0 голосов
/ 06 мая 2015

Просто поместив ответ 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];

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...