求最大公约数c语言

Python011

求最大公约数c语言,第1张

c语言求最大公约数有辗转相除法、更相减损术、穷举法三种。

辗转相除法。算法简介:将两个数a,b相除,如果余数c不等于0,就把b的值给a,c的值给b,直到c等于0,此时最大公约数就是b。

更相减损术。算法简介:将两个数中较大的数a减去较小的数b,如果差c等于0,那么最大公约数为b,如果不等于0,则将b的值给a,c的值给b,继续相减直到差等于0。

穷举法。算法简介:将两个数a,b中较小的值赋给i,将a除以i,b也除以i,若两者的余数同时为0时,此时的i就是两者的最大公约数。若不等于0,则将i-1,继续将a除以i,b除以i,直至余数同时为0。

最大公约数:

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。

早在公元前300年左右,欧几里得就在他的著作《几何原本》中给出了高效的解法——辗转相除法。辗转相除法使用到的原理很聪明也很简单,假设用f(x,y)表示x,y的最大公约数,取k=x/y,b =x%y,则x=ky+ b,如果一个数能够同时整除x和y,则必能同时整除b和y。

而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x,y)=f(y,x%y)(y>0),如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。

1、相减法

#include&ltstdio.h&gt

int main()

{

int a,b

int c=0//计数器

while(1)//循环判断的作用

{

printf("输入两个数字求最大公约数:")

scanf("%d%d",&a,&b)

while(a!=b)

{

if(a&gtb)

a=a-b

else

b=b-a

c++

}

printf("最大公约数是:%d\n",a)

printf("%d\n",c)

}

return 0

}

运行效果:

2、辗转相除法:

#include&ltstdio.h&gt

int a,b,temp

int Division(){

printf("请输入两个数(a,b):\n")

scanf("%d,%d",&a,&b)

if(a&ltb){

temp=a

a=b

b=temp

}

while(a%b!=0){

temp=a%b

a=b

b=temp

}

printf("最大公约数为:%d\n",b)

return 0

}

3、穷举法

#include&ltstdio.h&gt

int main()

{

int a,b,c

int d=0//计数器

while(1)

{

printf("输入两个数字求最大公约数:")

scanf("%d%d",&a,&b)

c=(a&gtb)?b:a//三目运算符

while(a%c!=0||b%c!=0)

{

c--

d++

}

printf("最大公约数是:%d\n",c)

printf("%d\n",d)

}

return 0

}

代码如下:

#include

int main()

{

int i,a,b,t

scanf(%d%d,&a,&b)//输入数a,b

if(a>b)//比较a,b大小,如果a>b则交换,结果为a<b p=""></b>

{

t=a

a=b

b=t

}

for (i = ai >= 2i--)//以较小的a为基数,每内次i减小1循环求最大公容约数

{

if (a % i == 0 &&b % i == 0)//如果两数均能整除某数则该数为最大公约数

{

printf(最大公约数是:%d\n,i)

break//已得到最大公约数后跳出循环

}

}

if(i==1)//若循环到最后仍无最大公约数则i=1

printf(两数只能同时被1整除!\n)

return 0

}