回 帖 发 新 帖 刷新版面

主题:[讨论]求助!C语言编写,求任意两数最大公约数和最小公倍数!

输入任意两个数,要求输出两数的 最大公约数和最小公倍数!
回复者必加分~

回复列表 (共22个回复)

11 楼

最小公倍数
#include <iostream>
using namespace std;
void main()
{
    int x,y,z;
    cout<<"Please enter x,y:";
    cin>>x>>y;
    if(x>y)
        z=x;
    else
        z=y;
    while(!((z%x==0)&&(z%y==0)))
    {
        z++;
    }
    cout<<z<<endl;
}

12 楼

离散数学里有算法
大概就是五楼的吧

13 楼

#include<stdio.h>
int main()
{
    int m,n,t;
    scanf("%d,%d",&m,&n);
    while(n%m!=0)
    {
        t=n%m;
        n=m;
        m=t;
    }
    printf("%d\n",t);
    getchar();
    return 0;
}
求两数最大公约数,两数之积除以最大公约数是最小公倍数

14 楼

给你个简单的:
#include "stdio.h"
void main()
{
    int r,m,n,t,p;
    scanf("%d%d",&m,&n);
    if(m>n)
    {
        t=m;
        m=n;
        n=t;
    }
    p=m*n;
    while(m!=0)
    {
        r=n%m;
        n=m;
        m=r;
    }
    printf("zui da gong yue shu shi:%d\n",n);
    printf("zui xiao gong bei shu shi:%d\n",p/n);

}

15 楼

略看了下8楼程序,程序是比较易懂,但是指出最简单的缺陷,若求两较大的数,要得调用多少次内存空间 ,至少得用register定下 
最好定义声明一函数,分解质因数,供求你的max(),min()调用

16 楼

[quote]给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;
}
[/quote]
你的普通代码是错误的!!!

17 楼

给个简单的
#include<stdio.h>
void main()
{ int x,y,a,b,z;
  printf("请输入2个数:\n");
  scanf("%d%d",&a,&b);
  if(a<b) 
  { z=a;a=b;b=z;}
    x=a;y=b;
    while(y!=0) /*用辗除法,直到b为0为止*/
    {
    z=x%y;
    x=y;
    y=z;
    }
    printf("最大公约数:%d\n",x);
    printf("最小公倍数:%d\n",a*b/x);
}

18 楼

看来不少人回复阿,其实楼主自己看看书肯定能写出来的,这个是学习C语言的一个很基础的算法问题了,这边的答案基本上都是辗转相除法做的,我这边也给你一段代码吧,是用递归方法做的,也是以前在书上看到的,希望楼主以后自己多思考,多练习

////////以下代码可以求的两个数的最小公倍数和最大公约数
#include <stdio.h>

int GetMaxGys(int m,int n)
{
  if (m==n)
     return m;
  else if (m>n)
     GetMaxGys(m-n,n);
  else
     GetMaxGys(n-m,m);
}

void main()
{
  int a,b;
  int maxgys,mingbs;//最大公约数和最小公倍数
  printf("%s\n","请输入两个数:");
  scanf("%d%d",&a,&b);
  maxgys=GetMaxGys(a,b);
  mingbs=a*b/maxgys; //求最小公倍数
  printf("%s","这两个数的最大公约数为:");
  printf("%d\n",maxgys);
  printf("%s","这两个数的最小公倍数为:");
  printf("%d\n",mingbs);
}

19 楼


求任意两数的最大公约数:
#include <stdio.h>
main()
{
    int m,n,i,t,max=0;
    printf("请输入任意两个正整数:");
    scanf("%d %d",&m,&n);
    if(m<n)
    {
      t=m;
      m=n;
      n=t;
    }
    for(i=1;i<=n;i++)
    {
        if((m%i==0)&&(n%i==0))
        max=i;
    }
    printf("最大公约数是%d\n",max);
}

20 楼

[quote]既然都写了~我也献丑了~
临时写的,但不知道对不对~
还望指正。。。。谢谢~
代码如下:
#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);
}
[/quote]

10楼:你的循环i,j值不等时,i--,j--又怎么有if(i==j)这种情况?!

我来回复

您尚未登录,请登录后再回复。点此登录或注册