Наибольший общий делитель двух чисел реализации трех методов и C языка

Ноль, Обзор

Эта статья описывает наибольший общий делитель двух чисел алгоритма и его реализации языка три 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 языка был получен выше алгоритм, на самом деле, существует различные методы наибольшего общего делитель разложение главного фактора и деление, и короткое, но компьютерные языки реализации аспектов, в настоящем документе три воспроизводимый метод является более подходящим компьютером и понял. Таким образом, выше алгоритм может не только мало, но и в связи с реализацией различного языка и логики, важно, чтобы расширить это основное бинарное мышление к разнообразным мышлению, решить ту же проблему в более сложной ситуации. Добро пожаловать, чтобы указать на ошибочность или недостатки, учиться друг у друга -

Опубликовано 19 оригинальных статей · вона похвала 7 · просмотров 6935

рекомендация

отblog.csdn.net/G_METHOD/article/details/86561334