求最大公约数三种方法
①辗转相除法
算法简介:将两个数a,b相除,如果余数c不等于0,就把b的值给a,c的值给b,直到c等于0,此时最大公约数就是b.
void main()
{
int a, b, c, m, n;
printf_s("请输入所求的两个数\n");
scanf_s("%d%d", &a, &b);
m = a;
n = b;
c = a%b;
while (c)
{
a = b;
b = c;
c = a%b;
}
printf_s("%d和%d的最大公约数为:%d\n", m, n, b);
printf_s("\n");
cvWaitKey(0);
}
②更相减损术
算法简介:将两个数中较大的数a减去较小的数b,如果差c等于0,那么最大公约数为b,如果不等于0,则将b的值给a,c的值给b,继续相减直到差等于0。
void main()
{
int a, b, c, m, n;
printf_s("请输入所求的两个数\n");
scanf_s("%d%d", &a, &b);
m = a;
n = b;
c = a - b;
while (c)
{
if (a > b)
{
c = a - b;
}
else if (a<b)
{
c = b - a;
}
else{
c = 0;
}
if (c){
a = b;
b = c;
}
}
printf_s("%d和%d的最大公约数为:%d\n", m, n, b);
printf_s("\n");
cvWaitKey(0);
}
③穷举法
算法简介:将两个数a,b中较小的值赋给i,将a除以i,b也除以i,若两者的余数同时为0时,此时的i就是两者的最大公约数。若不等于0,则将i-1,继续将a除以i,b除以i,直至余数同时为0。
void main()
{
int a, b, i, m, n;
printf_s("请输入所求的两个数\n");
scanf_s("%d%d", &a, &b);
m = a;
n = b;
if (a>b)
{
i = b;
}
else{
i = a;
}
for (i; i > 0;i--)
{
if (a%i==0 && b%i==0)
break;
}
printf_s("%d和%d的最大公约数为:%d\n", m, n, i);
printf_s("\n");
cvWaitKey(0);
}