首页 > 编程知识 正文

辗转相减法求最大公约数,C语言最大公约数辗转相除法

时间:2023-05-06 18:23:53 阅读:188322 作者:1341

#include#include /*编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(1

#include

#include

/*

编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。

例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 ,, 4)函数返回4

*/

//更相减损法

int fuc(int m,int n)

{

int i=0,temp,x;

while(m%2==0 && n%2==0) //判断m和n能被多少个2整除

{

m/=2;

n/=2;

i+=1;

}

if(m

//m保存大的值

{

temp=m;

m=n;

n=temp;

}

while(x)

{

x=m-n;

m=(n>x)?n:x;

n=(n

if(n==(m-n))

break;

}

if(i==0)

return n;

else

return (int )pow(2,i)*n;

}

//辗转相除法

int fuc2(int m,int n )

{

int temp;

if(m

{

temp=m;

m=n;

n=temp;

}

while(n!=0) //相除

{

temp=m%n;

m=n;

n=temp;

}

return m;

}

int main()

{

int m,n;

scanf("%d%d",&m,&n);

printf("fuc:%dn",fuc(m,n));

printf("fuc2:%dn",fuc2(m,n));

return 0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。