| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 78669 人关注过本帖, 1 人收藏
标题:C语言怎么求最大公约数和最小公倍数
只看楼主 加入收藏
yfj300
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-12-1
收藏
得分:0 
老谭的书上好像有提到!
2009-12-22 10:36
yfj300
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-12-1
收藏
得分:0 
回复 楼主 mey
我觉得你可以你笔算怎么算的,可以把这个过程写成程序就OK,不过这样并没有怎么讲究计算机的算法问题,关于程序的算法是经过长年总结不断形成的。所以那个辗什么相除法,要仔细看方能看明白。
如果兄台以后要从事写程序,那最好多了解一些比较成熟的算法,用怎么怎么想就怎么写,我觉得只能用来写着玩。真正写程序时要考虑的因素N多。
2009-12-22 10:40
eumenides
Rank: 2
等 级:论坛游民
帖 子:18
专家分:36
注 册:2009-12-25
收藏
得分:0 
没有去查询相关数学理论,用较笨的方法写了个,还望高人改进,鄙人qq416123649
#include<stdio.h>
int main(void)
{
 int n,m,i=1,max=1;
  printf("输入一个整数:");
 scanf("%d",&n);
printf("输入一个不同整数:");
 scanf("%d",&m);
 while(i<=n/2||i<=m/2){
  i++;
  if(n%i==0&&m%i==0){
   if(i>max)  max=i;
 }
 }
 printf("最大公约数是%d\n",max);
 if(n>m) i=n;
 else i=m;
 while(i%m!=0||i%n!=0){
  i++;
 }
 printf("最小公倍数是%d\n",i);
 return 0;
}
2009-12-26 19:23
crystal111
Rank: 2
等 级:论坛游民
帖 子:25
专家分:21
注 册:2009-11-15
收藏
得分:0 
1辗转相除法求最大公约数
当输入两个数m,n后比较m和n的大小,m中要是较大的一个数,n中放较小的那个数;
m去除以n,余数如果为0的话,则n就为最大公约数,否则的话,就做一个循环,(把n的值赋给m,把前两个数相除得到的值赋给n)直到余数为0;求出来的n就为最大公约数;
再利用:m*n=最小公倍数*最大公约数;

2当输入两个数m,n后比较m和n的大小,m中要是较大的一个数,n中放较小的那个数;
m去除以n,余数如果为0的话,则m就为最小公倍数,否则的话,让m去乘以i(是依次增加的);利用得到的这个值去继续除以n,直到余数为零,得到的m就为最小公倍数
2009-12-26 23:26
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
一般就是用 辗转相除法,用关键字一查讲这个算法的很多。

代码可能像下面这样:
int gcd(int a, int b)
{
    while (b) {
        int t = a % b;
        a = b;
        b = t;
    }
    return a;
}
2009-12-27 13:49
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
收藏
得分:0 
建议LZ 学习下辗转相除法,这个效率很高。
2009-12-27 15:12
HSU
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-1-3
收藏
得分:0 
初学,用了个笨办法:各位给看看,提提建议:
# include <stdio.h>
int main()
{
    int a,b,c,d,gcd1,gcd2,lcm1,lcm2,sum1,sum2;
    int gcd(int num1,int num2);
    int lcm(int num1,int num2);
    scanf("%d %d",&a,&b);
    scanf("%d %d",&c,&d);
    gcd1=gcd(a,b);
    gcd2=gcd(c,d);
    lcm1=lcm(a,b);
    lcm2=lcm(c,d);
    sum1=gcd1+gcd2;
    sum2=lcm1+lcm2;
    printf("%d\n",sum1);
    printf("%d\n",sum2);
    return 0;
}
int gcd(int num1,int num2)
{
    int temp,i,gcd;
    if(num1<num2)
    {temp=num2,num2=num1;num1=temp;}
    for (i=num2;i>0;i--)
        if(num1%i==0 && num2%i==0)
        {gcd=i;
         break;}
    return (gcd);
}
int lcm(int num1,int num2)
{
    int temp,i,lcm;
    if(num1<num2)
    {temp=num2,num2=num1;num1=temp;}
    for (i=num1;;i++)
        if(i%num1==0 && i%num2==0)
        {lcm=i;
         break;}
    return (lcm);
}
2010-01-03 18:10
andytony1234
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:74
专家分:102
注 册:2009-11-9
收藏
得分:0 
还在问这个题啊....这个是我以前写的...
#include<stdio.h>
void main()
{int m,n,i,t,s;
printf("这是一个求最大公约数和最小公倍数的程序,请输入m和n\n");
scanf("%d%d",&m,&n);
if(m<n)
t=m,m=n,n=t;
for(i=m/2;i>=1;i--)
if(m%i==0&&n%i==0)
break;

printf("最大公约数为:%d\n",i);
printf("最小公倍数为:%d\n",m*n/i);
}
2010-01-03 18:14
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
欧几里得算法, 网上搜一下`

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2010-01-03 20:27
yesyesgirl
Rank: 1
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-7-20
收藏
得分:0 
#include <stdio.h>
void main()
{
     int a,b,num1,num2,temp;
     scanf("%d,%d",&num1,&num2);
     if(num1<num2)
     {
         temp=num1;num1=num2;num2=temp;
     }
     a=num1;b=num2;
     while(b!=0)
     {
         temp=a%b; a=b; b=temp;
     }
     printf("%d\n",a);
     printf("%d\n",num1*num2/a);
}
2010-08-07 13:30
快速回复:C语言怎么求最大公约数和最小公倍数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012583 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved