三つの方法とC言語の実装の2つの数の最大公約数

ゼロ、概要

本論文では、アルゴリズムとその3つのC言語の実装の2つの数の最大公約数を説明し、最大公約数は、ここに知っている(または特定の自己百科事典や理解するための他の方法)する必要が定義されました。

また、本明細書において、Max_sort関数で使用されるC言語では、後続の符号化を容易にするために、<B場合、それを交換すること、bより必ずしも保証することです。コードは以下の通りであります:

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.ユークリッド

次いで、Bの除算、残りはCに割り当てられ、0か否かを判定し、そうでない場合はゼロ:フローチャートとして、要求のaとbの最大公約数の値は、アルゴリズムが簡単です割り当てB、Cが割り当てられ、そしてcが0になるまで上記の手順を繰り返すであろう。%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.メソッドが減少

その後の還元およびBは、得られた差は、Cに割り当てられ、それが0でない場合は0か否かを判定する:フローチャートとして、要求のaとbの最大公約数の値は、アルゴリズムが簡単です割り当てB、Cが割り当てられ、そしてcが0になるまで上記の手順を繰り返すであろう。AB = Cは、アルゴリズムは、数式左シフトのビューのこの直感的な点であり、ユークリッドアルゴリズムの実装は非常に近い、それはアイデアの起源が同じでなければならないしました。

//更相减损法
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.網羅方法

フローチャートとして、要求のaとbの最大公約数の値は、アルゴリズム網羅的方法、シンプルで粗製物を、単にとBを比較することで、Cに割り当てられた番号より小さい、Cは以下であります余りが0の場合、ターンとBのモジュロ演算の各値は、直ちに、それはaとbの最大公約数の数、そうでない場合、Cマイナス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言語で表現さ数学的モデルを用いて複数の数学的問題を感じています本明細書に3つの再現性のある方法の態様を実装することは、より適切なコンピュータであり、実現します。上記のアルゴリズムは、いくつかの、だけでなく、異なる言語の実装とロジックのためにできるだけでなくので、より複雑な状況で同じ問題を解決するため、多様な考え方にこの基本的な考え方のバイナリを拡大することが重要です。互いに学び、誤謬や不備を指摘へようこそ -

公開された19元の記事 ウォン称賛7 ビュー6935

おすすめ

転載: blog.csdn.net/G_METHOD/article/details/86561334