穷举法
#include <stdio.h>
/**
* @brief 获取两个正整数的最大公因数(穷举法)
* @param num1 第一个正整数
* @param num2 第二个正整数
* @return 最大公因数
*/
int
Get_Max_Comm_Divisor(
int
num1,
int
num2)
{
int
i = 0;
//获取两个整数的最小值
int
min = num1 < num2 ? num1 : num2;
//从两个数的最小值开始递减遍历
for
(i = min; i > 0; i--)
{
//i为num1和num2的公倍数
if
(num1 % i == 0 && num2 % i == 0)
break
;
}
return
i;
}
int
main()
{
int
num1 = 0, num2 = 0;
puts
(
"请输入两个正整数."
);
scanf
(
"%d%d"
, &num1, &num2);
printf
(
"最大公约数为%d.\n"
, Get_Max_Comm_Divisor(num1, num2));
return
0;
}
辗转相除法
#include <stdio.h>
/**
* @brief 获取两个正整数的最大公因数(辗转相除法)
* @param num1 第一个正整数
* @param num2 第二个正整数
* @return 最大公因数
*/
int
Get_Max_Comm_Divisor(
int
num1,
int
num2)
{
int
remainder = num1 % num2;
//余数
while
(remainder != 0)
{
num1 = num2;
//更新被除数
num2 = remainder;
//更新除数
remainder = num1 % num2;
//更新余数
}
return
num2;
//最后的除数即为最大公因数
}
int
main()
{
int
num1 = 0, num2 = 0;
puts
(
"请输入两个正整数."
);
scanf
(
"%d%d"
, &num1, &num2);
printf
(
"最大公约数为%d.\n"
, Get_Max_Comm_Divisor(num1, num2));
return
0;
}
相减法
#include <stdio.h>
/**
* @brief 获取两个正整数的最大公因数(更相减损法)
* @param num1 第一个正整数
* @param num2 第二个正整数
* @return 最大公因数
*/
int
Get_Max_Comm_Divisor(
int
num1,
int
num2)
{
//两数相减的结果(取正值)
int
diff = num1 > num2 ? num1 - num2 : num2 - num1;
while
(diff != 0)
{
num1 = num2;
//更新被减数
num2 = diff;
//更新减数
diff = num1 > num2 ? num1 - num2\
: num2 - num1;
//更新两数相减的结果(取正值)
}
return
num2;
//最后的减数即为最大公因数
}
int
main()
{
int
num1 = 0, num2 = 0;
puts
(
"请输入两个正整数."
);
scanf
(
"%d%d"
, &num1, &num2);
printf
(
"最大公约数为%d.\n"
, Get_Max_Comm_Divisor(num1, num2));
return
0;
}