当前位置: 代码迷 >> C语言 >> 关于最大公约数的困扰
  详细解决方案

关于最大公约数的困扰

热度:390   发布时间:2007-09-10 16:11:52.0
关于最大公约数的困扰
int yue(int x,int y)
{ int i,t;
int n;
if (x>=y) t=y;
else t=x;
for(i=1;i<=t;i++)
{ (x%i==0)&&(y%i==0);
n=i;
}
return(n);
}
以上是一个求最大公约数的函数,请问大虾错在哪里?我老运行不出来
搜索更多相关的解决方案: 最大公约数  困扰  

----------------解决方案--------------------------------------------------------
for(i=1;i<=t;i++)
{ if(x%i==0 && y%i==0)
n=i;
}
----------------解决方案--------------------------------------------------------

论坛里有这样的例子,求最大公约数和最小公倍数的函数,在C语言中用辗转相除法比较多.
呵呵,我是刚看到的,以前也不知道.我转载一个.
比如:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序源代码:
main()
{
  int a,b,num1,num2,temp;
  printf("please input two numbers:\n");
  scanf("%d,%d",&num1,&num2);
  if(num1  { temp=num1;
   num1=num2; 
   num2=temp;
  }
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
  {
   temp=a%b;
   a=b;
   b=temp;
  }
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}


----------------解决方案--------------------------------------------------------
利用递归求公约数
int gcd(num1,num2) //求最大公约数
{
  if(num1<num2) //如果num1比num2小,则将他们交换位置
 { temp=num1;
   num1=num2; 
   num2=temp;
  }
if(num1%num2==0)
return num2;
else
return gcd(num2,num1%num2);
}
公倍数就是num1*num2/gcd(num1,num2)
----------------解决方案--------------------------------------------------------
谢谢大家的回复,豁然开朗了
----------------解决方案--------------------------------------------------------


----------------解决方案--------------------------------------------------------
int a,b,c;
while(b)
{ c=a%b;
a=b;
b=c;
}


renturn a;
----------------解决方案--------------------------------------------------------
for(i=1;i<=t;i++)
{ (x%i==0)&&(y%i==0);
n=i;
这个里面的i应该是从2开始,也就是for(i=2;i<=t;i++)否则的话,你运行出来的n永远是1.还有如果从2开始取余,没有找到最大公约数,那么公约数就是1了。说明你的程序还没有编完嘛
----------------解决方案--------------------------------------------------------
  相关解决方案