Ноль, Обзор
Эта статья описывает наибольший общий делитель двух чисел алгоритма и его реализации языка три C, наибольший общий делитель определено здесь нужен знать (или конкретную самостоятельная энциклопедия или другой способ понять).
Кроме того, в данном контексте, язык Си используется в функции Max_sort является обеспечение обязательно, чем Ь, что если а <Ь, то он обменивается, чтобы облегчить последующее кодирование. Код выглядит следующим образом:
int Max_sort(int *a, int *b)
{
if (a == NULL || b == NULL) return -1;
if (*a < *b) //如果比较小则交换
{
*a += *b;
*b = *a - *b;
*a -= *b;
}
return 0;
}
Во-первых, тело алгоритм
1. евклидовой
В блок-схеме, значение наибольший общий делитель а и Ь запроса, алгоритм прост: разделение а и б, а остальная часть назначается C, и определяет, является ли 0, если не равен нулю, то присвоение Ь к а, с будет назначен а, а затем повторить описанные выше шаги до тех пор, пока с 0. A% B = C, алгоритм математическая формула Наглядно операция сдвига влево.
//辗转相除法
int ZZXC_Function(int a, int b)
{
int c = 0;
Max_sort(&a, &b);
c = b;
do
{
b = c;
c = a%b;
a = b;
} while (c != 0);
return b;
}
2. Метод Понижает
В блок-схеме, значение наибольший общий делитель а и Ь запроса, алгоритм прост: уменьшение а и б, полученную разность назначается C, и определяет, является ли или 0, если он не равен 0, то присвоение Ь к а, с будет назначен а, а затем повторить описанные выше шаги до тех пор, пока с 0. аЬ = с, алгоритм это интуитивное точки зрения математической формулы сдвиг влево, и евклидово реализация алгоритма была очень близка, она должна быть происхождение идеи является то же самое.
//更相减损法
int GXJS_Function(int a, int b)
{
int c = 0;
Max_sort(&a, &b);
c = b;
do
{
b = c;
a>b ? c = a - b : c = b - a;
a = b;
} while (c != 0);
return b;
}
3. Способ исчерпывающего
В блок-схеме, значение наибольший общий делитель а и Ь запроса, алгоритм исчерпывающим образом, простой и сырой, просто сравнить и Ь, тем меньше номер, присвоенный C, C меньше или равно каждое значение, в свою очередь, и и операции по модулю Ь немедленно, если остаток равен 0, то это означает, что число наибольшего общего делителя а и б, если нет, то значение с минус 1, повторите описанные выше шаги. В качестве кода, когда значение является относительно большим, требует исчерпывающего количества также возрастает, то эффективность уменьшается.
//穷举法 当数值比较大时,明显效率下降
int QJ_Function(int a, int b)
{
int c;
Max_sort(&a, &b);
c = b;
while (a%c != 0 || b%c != 0)
{
c--;
}
return c;
}
Во-вторых, слова
Наибольший общий делитель чувствует более математическую задачу, используя математическую модель, высказанный C языка был получен выше алгоритм, на самом деле, существует различные методы наибольшего общего делитель разложение главного фактора и деление, и короткое, но компьютерные языки реализации аспектов, в настоящем документе три воспроизводимый метод является более подходящим компьютером и понял. Таким образом, выше алгоритм может не только мало, но и в связи с реализацией различного языка и логики, важно, чтобы расширить это основное бинарное мышление к разнообразным мышлению, решить ту же проблему в более сложной ситуации. Добро пожаловать, чтобы указать на ошибочность или недостатки, учиться друг у друга -