求两个数的最大公约数

lqr1992164 2013-01-01 06:35:24
求两个正整数的最大公约数,怎么编写程序
...全文
185 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2013-01-03
  • 打赏
  • 举报
回复
gcd...
MoreWindows 2013-01-02
  • 打赏
  • 举报
回复
效率最高的代码:

//BigInt为自己实现的一个大整数类,IsEven()判断是否为偶数 
BigInt gcd(BigInt x,BigInt y)
{
	if(x < y)
	  return gcd(y,x);
    if(y == 0)
       return x;
    else{
       if(IsEven(x))
	   {
	   	  if(IsEven(y)) //情形1,x,y均为偶数 
	   	    return 2 * gcd(x >> 1, y >> 1);
          else  //情形2,x为偶,y为奇 
            return gcd(x >> 1, y);
	   }
	   else
	   {
	   	  if(IsEven(y)) //情形3,x为奇,y为偶 
	   	    return gcd(x, y >> 1);
  	      else  //情形4,x,y均为奇 
  	        return gcd(y, x - y);
	   }
    }
}
ForestDB 2013-01-01
  • 打赏
  • 举报
回复

int GCD(int a,int b)
 {
        if(b==0) return a;
        else return GCD(b,a%b);
 }
14号选手 2013-01-01
  • 打赏
  • 举报
回复
可以使用辗转相除法,也就是递归的思想
#include <stdio.h>
int main(void)
{
	int a,b,c,t;
	printf("input numbers:");
	scanf("%d%d",&a,&b);
	c=a%b;
	while(1)
	{
		if(c==0)
		{
			printf("最大公约数是:%d\n",b);
			break;
		}
		else
		{
			t=b;
			b=c;
			c=t%c;
			if(c==0)
			{
				printf("最大公约数是:%d\n",b);
				break;
			}
		}
	}
	return 0;
}
wangeen 2013-01-01
  • 打赏
  • 举报
回复
template<typename T>  
T substarctive_gcd_nozero(T a, T b){  
    while(true){  
        if(b<a)    a=a-b;  
        else if(a<b)  b=b-a;  
        else return a;  
    }  
}   
pengfoo 2013-01-01
  • 打赏
  • 举报
回复
int MaxElement(int a,int b)
{
   int c = min(a,b);
   int i;
   for(i=c;i>0;i--)
   {
      if(a%i==0 && b%i==0)
        return i;
   }
}
图灵狗 2013-01-01
  • 打赏
  • 举报
回复

#include <stdio.h>

int main(int argc, char* argv[])
{
int m, n;
int m_cup, n_cup, res; /*被除数, 除数, 余数*/
printf("Enter two integer:\n");
scanf("%d %d", &m, &n);
if (m > 0 && n >0)
{
m_cup = m;
n_cup = n;
res = m_cup % n_cup;
while (res != 0)
{
m_cup = n_cup;
n_cup = res;
res = m_cup % n_cup;
}
printf("Greatest common divisor: %d\n", n_cup);
printf("Lease common multiple : %d\n", m * n / n_cup);
}
else printf("Error!/n");
return 0;
} 
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{int a,b,r,i;
scanf("%d",&a,&b);
r=x>=y?x:y;
for(i=1;i<=r;i++)
if(x%i==0&&y%i==0)
n=i;
printf("%d",n);
}

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧