1.常规求公约数方法
使用短除法
2.欧几里得算法/辗转相除法
两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。
数学表示:gcd(a,b)=gcd(b,amodb)
算法表示:
1.流程图:
2.伪代码:
input a,b; //输入两个整数。
create r; //中间量用来存放余数。
while(b>0)
{
r=a%b;
a=b;
b=r;
}
output a; //当b=0时,a即为最大公约数。
C程序设计:
/*
程序说明:欧几里得算法,求两个正整数的最大公约数。
*/
#include “stdafx.h”
#define uint unsigned int
uint gcd(uint Positive_Integer_1, uint Positive_Integer_2);
//定义法:直接调用gcd函数
int main()
{
uint Positive_Integer_1, Positive_Integer_2; //输入两个正整数。
//Positive_Integer正整数
printf("请输入两个正整数:\n");
scanf_s("%d %d", &Positive_Integer_1, &Positive_Integer_2);
uint Greatest_Common_Divisor = gcd(Positive_Integer_1, Positive_Integer_2);
//Greatest_Common_Divisor最大公约数
printf("%d和%d的最大公约数是:%d\n",Positive_Integer_1,Positive_Integer_2, Greatest_Common_Divisor);
return 0;
}
/*
函数说明:运用欧几里德算法,求两个正整数的最大公约数。
*/
uint gcd(uint Positive_Integer_1, uint Positive_Integer_2)
{
uint Greatest_Common_Divisor;
while (Positive_Integer_2>0) //如果余数不为0,就一直进行辗转相除
{
Greatest_Common_Divisor = Positive_Integer_1 % Positive_Integer_2;
Positive_Integer_1 = Positive_Integer_2;
Positive_Integer_2 = Greatest_Common_Divisor;
}
return Positive_Integer_1; //余数为0, Positive_Integer_1即为最大公约数。
}