最大公約数を見つける:より多くの減算と除算

より多くの減算法の原理

161と63の2つの数があるとします。これら2つの数の最大公約数が必要です。最大公約数がmであると仮定します。大きい方の数161は63+ 98、63と98の合計と見なすことができます。は161です。mで割り切れる、63もmで割り切れる、98はmで割り切れる自然です。

したがって、この質問は、98と63の最大公約数m(上記のmに等しい)を見つけることに変換されます
。98を63 + 35と考えます。ここで、63はmで割り切れ、98もmで割り切れます。 mDivideにすることもできます。

したがって、質問はさらに35と63の最大公約数m(上記のmに等しい)
を見つけることに変換されます。同じことが(63-35)=> 28と35の最大公約数を見つけることに変換され、次に見つけることに変換されます。28と7の最大公約数…(減少し続けます)

次に
、7と7の最大公約数に変換され最後に7と0の最大公約数に変換されまし
。最初の数値を出力するだけです。これが減算の原理です。

#include<stdio.h> 
main()
{
    
    	int a,b,num1,num2;
	printf("请输入这两个数:");
	scanf("%d %d",&a,&b);
	num1=a,num2=b;
	
	while(a!=b)/* a, b不相等,大数减小数,直到相等为止。*/ 
	{
    
    
	if(a>b)
	a-=b;
	else
	b-=a;
	}//a==b结束循环,根据更相减损术,若a==b,则a(或b)即为两数的最大公约数。
	printf("a、b的最大公约数为:%d\n",a);
	printf("a、b的最小公倍数为:%d",num1*num2/a);//最小公倍数=两整数的乘积÷最大公约数
}

投げて分割する原理

トスアンドターン除算は、最大公約数を見つける方法です。具体的な方法は、大きい方の数を小さい方の数で割り、表示される残りの数(最初の余り)を使用して除算器を削除し、表示される残りの数(2番目の余り)を使用して最初の余りを削除することです。最後まで残りは0になります。2つの数の最大公約数を見つける場合、最後の約数はこれら2つの数の最大公約数です。

int gcd(int a,int b){
    
    
	if(b==0) return a;
	else return gcd(b,a%b);
}

またはより簡潔な書き方

int gcd(int a,int b){
    
    
	return !b?a:gcd(b,a%b);
}

おすすめ

転載: blog.csdn.net/david2000999/article/details/112979428