谁能帮解答下 编程题 1.输入两个正整数m和n,求其最大公约数和最小公倍数。

 我来答
华录_起点
推荐于2016-12-02 · TA获得超过1055个赞
知道小有建树答主
回答量:533
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
#include<iostream.h>
void main()
{ int m,n,i,j,mn,a,x,y;
printf("请输入m,n\n");
scanf("%d%d",&m,&n);
mn=m*n;
a=(m<n)?m:n;
for (i=2;i<a;i++)
{ if (m%i==0 && n%i==0)
x=i;
}
printf("m和n的最大公约数是%d\n",x);
for (j=mn;j>=((m>n)?m:n);j--)
{ if (j%m==0 && j%n==0)
y=j;
}
printf("m和n的最小公倍数是%d\n",y);
}

参考资料: http://wenwen.soso.com/z/q137623015.htm

大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
噢天气不错ooe
2010-09-04 · TA获得超过219个赞
知道答主
回答量:110
采纳率:0%
帮助的人:51.9万
展开全部
int fun1(int m,int n)
{
while(m!=n)
{
if(m>n) m=m-n;
else n=n-m;
}
return (m);

}
跟你讲讲辗转相除法的原理。
两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慕连枝沃俏
2019-12-09 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.4万
采纳率:27%
帮助的人:761万
展开全部
用c++实现如下:
#include
void
main()
{
int
a,b,c,d;
cout<<"请输入两个数"<
>a>>b;
d=a*b;
while(c=a%b)
{
a=b;
b=c;
}
cout<<"最大公约数为"<
void
main()
{
int
a,b,c,d;
printf("请输入两个数\n");
scanf("%d%d",&a,&b);
d=a*b;
while(c=a%b)
{
a=b;
b=c;
}
printf("最大公约数为%d\n",b);
printf("最小公倍数为%d\n",d/b);
}
备注:最小公倍数等于两个数的乘积除以最小公约数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wenjincaiwenhg
2010-09-19 · TA获得超过171个赞
知道答主
回答量:86
采纳率:100%
帮助的人:50.8万
展开全部
用c++实现如下:
#include<iostream.h>
void main()
{
int a,b,c,d;
cout<<"请输入两个数"<<endl;
cin>>a>>b;
d=a*b;
while(c=a%b)
{
a=b;
b=c;

}
cout<<"最大公约数为"<<b<<endl;
cout<<"最小公倍数为"<<d/b<<endl;

}
用c语言实现如下:
#include<stdio.h>
void main()
{
int a,b,c,d;
printf("请输入两个数\n");
scanf("%d%d",&a,&b);
d=a*b;
while(c=a%b)
{
a=b;
b=c;

}
printf("最大公约数为%d\n",b);
printf("最小公倍数为%d\n",d/b);

}
备注:最小公倍数等于两个数的乘积除以最小公约数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
screwy_devil
2010-09-04 · 超过13用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>

int gcd(int a,int b){ // 求最大公约数。
if ( b==0 ) return a;
return gcd(b,a%b);
}

int main(){
int m,n,GcdResult;
scanf("%d%d",&m,&n); //输入。
GcdResult=gcd(m,n);//主过程。
printf("Gcd is %d\nLcm is %d\n",GcdResult,n*m/GcdResult);//输出
return 0;
}

辗转相除法.
ps: 1. 二楼的太慢,并且是辗转相减法。可以用,更改一下,改成递归,并且
当m n为偶数时整除2,时间为log2(n).
2.gcd() // 即本程序 时间复杂度为斐伯那契数列的反函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式