更相损减法:
《九章算术·方田》作分数约简時,提到求最大公因数方法:反覆把两数的较大者減去较小者,直至两数相等,这数就是最大公因数。这方法除了把除法换作減法外,与辗转相除法完全相同。例如书中求91和49的最大公因数:
- 91 > 49, 91 - 49 = 42
- 49 > 42, 49 - 42 = 7
- 42 > 7, 42 - 7 = 35
- 35 > 7, 35 - 7 = 28
- 28 > 7, 28 - 7 = 21
- 21 > 7, 21 - 7 = 14
- 14 > 7, 14 - 7 = 7
- 7 = 7, 因此91和49的最大公因数是7
using namespace std;
int main(void)
{
int num1,num2;
cin>>num1>>num2;
while(num1!=num2)
{
if(num1>num2)
{
num1 = num1 - num2;
}
else
num2 = num2 - num1;
}
cout<<num1<<endl;
return 0;
}
using namespace std;
int max_common_divisor(int num1,int num2){
return num2 == 0?num1:max_common_divisor(num2,num1%num2);
}
int main()
{
int num1,num2;
cin>>num1>>num2;
cout<<max_common_divisor(num1,num2)<<endl;
return 0;
}
using namespace std;
int max_common_divisor(int num1,int num2){
return num2 == 0?num1:max_common_divisor(num2,num1%num2);
}
int max_common_divisor2(int result,int num3){
return num3 == 0?result:max_common_divisor2(num3,result%num3);
}
int main()
{
int num1,num2,num3;
int result;
cin>>num1>>num2>>num3;
result = max_common_divisor(num1,num2);
cout<<max_common_divisor2(result,num3)<<endl;
return 0;
}