C言語の最大の一般的な除数ソリューションの方法と時間の複雑さの比較

C言語の最大の一般的な除数ソリューションの方法と時間の複雑さの比較

—最大の共通因子、最大の共通除数、最大の共通因子、2つ以上の整数の最大除数を指します数学の一般的な数学的概念として、最大の一般的な除数は、C言語でさまざまな方法で解決することもできます。方法が異なれば、理解の難しさと時間の複雑さも異なります。
以下では、最大の一般的な除数を見つけるためのいくつかの方法を紹介します。

1.激しい消耗:

この方法は、理解するのが最も難しい方法ではありません。2つの数値は、2つの数値の小さい方から1に周期的にデクリメントされ、2つの数値を満たす最初の数値は、残りの0を取り、それを出力します。

int num1=0;
int num2=0;
printf("请输入两个数字求最大公约数,用空格间隔:");
scanf("%d %d",&num1,&num2);
int min=num1;
	if (num1>num2){
    
    
		min=num2;
				}//把最小的数字赋值给min
	int time=0;//在循环中设置一个变量记录时间复杂度
	for(int i=min;i>=1;i--){
    
    
		time++;
		if(num1%i==0 && num2%i==0){
    
    
		printf("它们的最大公约数是:%d\n 时间复杂度是%d:\n",i,time);
		//输出最大公约数和时间复杂度
		break;
		}
}				

ここに写真の説明を挿入

2.投げて回して分割します。

この方法はユークリッドアルゴリズムとも呼ばれ、数学のルールを使用して解決します。

ここに写真の説明を挿入
2つの数値を除算して残りを取ります。(num1%num2)最初の数値が終了し、2番目の数値が次のラウンドの最初の数値で、残りが2番目の数値であり、ループが続行されます。原則は、2つの整数の最大の共通除数は、小さい方の数の最大の共通除数と2つの数値の除算の残りの部分に等しいということです。
(Baidu百科事典からの出典)

ループを使用して、アルゴリズムのトスと分割のステップを表すことができます。具体的な手順は次のとおりです。

int num1,num2;
printf("请输入两个数字求最大公约数,用空格间隔:");
scanf("%d %d",&num1,&num2);
int i=0;//余数
int time=0;//在循环中设置一个变量记录时间复杂度
	while((i=num1%num2)!=0){
    
    //注意括号的写法,运算符的优先级会影响结果
		num1=num2;
		num2=i;
		time++;
		}
printf("它们的最大公约数是:%d\n 时间复杂度是%d:\n",num2,time);
		//输出最大公约数和时间复杂度		

ここに写真の説明を挿入

3.より多くの減算方法:

より多くの減算法:より多くの減算法とも呼ばれます。これは「算術の9つの章」から最大の共通除数を見つけるためのアルゴリズムです。元々は削減のために設計されましたが、最大の共通除数を必要とする要件に適しています。機会。
2つの数値を入力し、大きい方の数値から小さい方の数値を減算し、数値が同じになるまで残りの割り当てを減算します。これは、最大の一般的な除数です。
具体的なコードは次のとおりです。

int num1, num2, time=0;//在循环中设置一个变量记录时间复杂度
	printf("请输入两个数字求最大公约数,用空格间隔:");
	scanf("%d %d", &num1, &num2);
	while (num1 != num2){
    
    
		if (num1>num2)
			num1 = num1 - num2;
		else
			num2 = num2 - num1;
		time++;
	}
	
	printf("它们的最大公约数是:%d\n 时间复杂度是%d:\n", num1, time);


ここに写真の説明を挿入上記の3つの方法は、参照用として、比較的単純で理解しやすいものです。
時間の複雑さは特定の例に関連していますが、ブルートフォース枯渇法は推奨されていません(一般的に大きい...)

おすすめ

転載: blog.csdn.net/zhaocx111222333/article/details/109199147