主题:[讨论]求助!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);
}
我来回复