主题:[讨论]求助!C语言编写,求任意两数最大公约数和最小公倍数!
			
 cq1988124
				 [专家分:30]  发布于 2007-12-29 10:01:00							
			输入任意两个数,要求输出两数的 最大公约数和最小公倍数!
回复者必加分~
						
					 
		
			
回复列表 (共22个回复)
		
								
				沙发
				
					
scaredkinght [专家分:5310]  发布于 2007-12-29 12:46:00				
				这个其实挺简单的  知道数学原理吧  比如 辗转相除法之类的 自己想想 很容易写出来
							 
						
				板凳
				
					
bpttc [专家分:8790]  发布于 2007-12-29 14:29:00				
				for ( gcd=x, t=y; t; ) t^=gcd^=t^=gcd%=t;
lcm = x / gcd * y;
							 
						
				3 楼
				
					
zhangwei123 [专家分:2210]  发布于 2007-12-29 15:55:00				
				本站就有原代码 搜搜很多
							 
						
				4 楼
				
					
KKKAWP [专家分:70]  发布于 2007-12-29 20:38:00				
				会用搜索引擎么.......................
                  打开IE浏览器............................
在地址后面输入 www.baidu.com   回车
                        然后在百度那个长方框里输入   公约公倍   回车
              
							 
						
				5 楼
				
					
Zero1 [专家分:710]  发布于 2007-12-30 00:50:00				
				
//保证均是非零整数的情况下
int gcd(int a,int b)
{
   if(a%b)gcd(b,a%b);
   else return b;
}
int lcd(int a,int b)
{
   return (((a)*(b))/gcd(a,b))
}
							 
						
				6 楼
				
					
G.lonG [专家分:0]  发布于 2008-01-04 18:03:00				
				楼上太强了,本人属菜鸟级别.第一次看到C的魅力//
							 
						
				7 楼
				
					
ppc [专家分:3090]  发布于 2008-01-04 18:36:00				
				我觉得这仅仅是算法的魅力~
							 
						
				8 楼
				
					
asd789 [专家分:740]  发布于 2008-01-04 18:48:00				
				给LZ个函数调用的代码   这些题都是不难的 希望LZ多想想
#include <stdio.h>
int max(int x,int y);
int min(int m,int n);
int main(void)
{
    int a,b,max_1=0,min_1=0;
    printf("请输入两个正整数:");
    scanf("%d %d,",&a,&b);
    max_1=max(a,b);
    min_1=min(a,b);
    printf("最大公约数是%d\n最小公倍数是%d",max_1,min_1);
    return 0;
}
int I,J;
int max(int x,int y)
{
    int t,l=0;
    if(y>x)
    {
        t=x;
        x=y;
        y=t;
    }
    for(I=1;I<=y;I++)
        if((x%I==0)&&(y%I==0))
    l=I;
    return l;
}
int min(int m,int n)
{
    int t,p=0;
    if(n>m)
    {
        t=m;
        m=n;
        n=t;
    }
    for(J=m;J<=m*n;J++)
        if((J%m==0)&&(J%n==0))
        {
            p=J;
            break;
        }
        return p;
}
还有个普通的代码
#include <stdio.h>
int main(void)
{
    int m,n,i,j,t,max=0,min=0;
    printf("请输入任意两个正整数:");
    scanf("%d %d",&m,&n);
    if(m>n)
    {
        t=m;
        n=t;
        m=n;
    }
    for(i=1;i<=n;i++)
    {
        if((m%i==0)&&(n%i==0))
        max=i;
    }
    for(j=n;j<=n*m;j++)
    {
        if((j%m==0)&&(j%n==0))
        {
            min=j;
            break;
        }
    }
    printf("最大公约数是%d\n最小公倍数是%d",max,min);
    return 0;
}
							 
						
				9 楼
				
					
prowell [专家分:70]  发布于 2008-01-04 20:11:00				
				抄袭一段,原文: http://enjoy-math.equn.com/Math/number_theory.htm#最大公约数&最小公倍数
求a、b的最大公约数GCD: 
 1.质因数分解法:
    1, 对两数分别分解质因数;
    2, 找出共有的因数, 其乘积即是它们的最大公约数.
 2.辗转相除法:
    1, 若 a>b 执行<2>, 否则交换 a,b 执行<2>. 
    2, a <- a mod b
    3, 若a或b等于一, 则另一个数是它们的最大公约数.否则执行<1>. 
求a、b的最小公倍数LCM:
    最小公倍数=ab÷最大公约数
对于求n个数的最大公约数&最小公倍数, 需分别求出每两个数的最大公约数(最小公倍数)将结果作同样处理. 
							 
						
				10 楼
				
					
cq1988124 [专家分:30]  发布于 2008-01-04 20:37:00				
				既然都写了~我也献丑了~
临时写的,但不知道对不对~
还望指正。。。。谢谢~
代码如下:
#include<stdio.h>
void main()
{ 
  int a,b,i,j,max,min;
  scanf("%d%d",&a,&b);
  for(i=a-1,j=b-1;i>0&&j>0;i--,j--)
     {
       if(a%i==0&&b%j==0)
          {
            if(i==j)
            max=i;
          }
  min=(a/max)*(b/max)*max;
printf("最大公约数是:/%d\n",max);
printf("最小公倍数是:/%d\n",min);
}
							 
									
			
我来回复