ユークリッド
除数剰余除算を繰り返し余りが0である場合、式は現在の除数が最大公約数であるかかり、行います。
# include<stdio.h>
int main()
{
int num1,num2,t=1;
scanf("%d %d",&num1,&num2);
while(t) //辗转相除法
{
t=num1%num2;
num1=num2;
num2=t;
}
printf("%d",num1);
return 0;
}
最大公約数のためにも使用することができます減少サイトメトリーを。しかし、そのNUM1とNUM2のサイズを検討します。
テクニックを下げます
最初のステップ:任意の正の整数のための2つ、彼らもあるかどうかを決定します。その後ならない第2のステップと、もしそうであれば、2還元有します。
第二段階:小さく、次いで得られた差を比較し、より多くの数を減らすことが小さいと数であり、そして多数の数を減少させます。この操作は、同じ減数と差分合成まで続きます。
製品及び第二工程の生成物の平均個数は2最大公約数を必要とされる程度の複数のうちの最初のステップです。
ここでは、言った「と、いくつかの」除数です。シーク「といくつかの」アプローチは、「減少」する方法です。
# include<stdio.h>
# include<math.h>
int main()
{
int num1,num2,count=0;
scanf("%d %d",&num1,&num2);
if((num1%2==0)&&(num2%2==0))
{
num1/=2;
num2/=2;
count++;
} //减少运算量
while(num1!=num2) //更相减损术
{
if(num1>num2)
{
num1-=num2;
}
else
{
num2-=num1;
}
}
num1=num1*pow(2,count);
printf("%d",num1);
return 0;
}