C语言中,求两个数的最小公倍数,的“高效”算法是?
3个回答
展开全部
这思路我自己想的,但是我也说不太明白,反正我知道怎么回事
1先判断大数%小数是不是0,是0那么大数就是最小公倍数
2不是的话,让大数%小数得到一个数,让小数%得到的数,如果得0
那么让大数*(小数/(大数%小数)),得到得数是最小公倍数
3如果2中小数%得到的这个数不等于0,那么恭喜你,这两个数的最小公倍数就是:大数*小数
4如果这两个数相等,那么,随便一个都是最小公倍数
纯手打,今天刚好做这个题,看到网上没什么答案,我就写写我的思路
C++语法如下:
int pd(int A,int B);
int main() {int i, k;goto C;
C: {
printf("第一个数:"); scanf("%d", &i);
printf("第二个数:"); scanf("%d", &k);
printf("这两个数的公倍数为:%d\n\n", pd(i, k));
goto C; }
return 0;
}
int pd(int A, int B) {
int P;
if (A > B) {
if (A%B == 0) { P = A; }
else if (B % (A%B) == 0) { P = A*(B / (A%B)); }
else { P = A*B; }
}
else if (B > A) {
if (B%A == 0) { P = B; }
else if (A % (B%A) == 0) { P = B*(A / (B%A)); }
else { P = B*A; }
}
else { P = A; }
return P;
}
1先判断大数%小数是不是0,是0那么大数就是最小公倍数
2不是的话,让大数%小数得到一个数,让小数%得到的数,如果得0
那么让大数*(小数/(大数%小数)),得到得数是最小公倍数
3如果2中小数%得到的这个数不等于0,那么恭喜你,这两个数的最小公倍数就是:大数*小数
4如果这两个数相等,那么,随便一个都是最小公倍数
纯手打,今天刚好做这个题,看到网上没什么答案,我就写写我的思路
C++语法如下:
int pd(int A,int B);
int main() {int i, k;goto C;
C: {
printf("第一个数:"); scanf("%d", &i);
printf("第二个数:"); scanf("%d", &k);
printf("这两个数的公倍数为:%d\n\n", pd(i, k));
goto C; }
return 0;
}
int pd(int A, int B) {
int P;
if (A > B) {
if (A%B == 0) { P = A; }
else if (B % (A%B) == 0) { P = A*(B / (A%B)); }
else { P = A*B; }
}
else if (B > A) {
if (B%A == 0) { P = B; }
else if (A % (B%A) == 0) { P = B*(A / (B%A)); }
else { P = B*A; }
}
else { P = A; }
return P;
}
展开全部
不知道是不是最高效的,应该还可以
c++语言的如下:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
if(a > b)
{
int temp = a;
a = b;
b = a;
}
int i = 1;
while(!(b * i % a == 0))
i++;
cout << i * b << endl;
return 0;
}
就是先找到两个数的较大的一个,然后依次枚举较大数的一倍,两倍,三倍,知道找到最小公倍数!
c++语言的如下:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
if(a > b)
{
int temp = a;
a = b;
b = a;
}
int i = 1;
while(!(b * i % a == 0))
i++;
cout << i * b << endl;
return 0;
}
就是先找到两个数的较大的一个,然后依次枚举较大数的一倍,两倍,三倍,知道找到最小公倍数!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个C程序可同时求出最小公倍数和最大公约数,最小公倍数等于这2个数的乘积除以最大公约数。最大公约数的算法基本不能再简了,在此值上再做一次乘和除就得到最小公倍数了。
void main()
{
int r,t,numa,numb,p;
printf("please input two numbers:\n");
scanf("%d,%d",&numa,&numb);
/*把输入的2个数中大数存在numa中*/
if(numa<numb)
{ t=numa; numa=numb; numb=t; }
p=numa*numb;
/*求2数的最大公约数,保存在numa中*/
while(m!=0)
{
r=numa%numb;
numa=numb;
numb=r;
}
printf("最小公倍数是:%d",p/numa);
}
void main()
{
int r,t,numa,numb,p;
printf("please input two numbers:\n");
scanf("%d,%d",&numa,&numb);
/*把输入的2个数中大数存在numa中*/
if(numa<numb)
{ t=numa; numa=numb; numb=t; }
p=numa*numb;
/*求2数的最大公约数,保存在numa中*/
while(m!=0)
{
r=numa%numb;
numa=numb;
numb=r;
}
printf("最小公倍数是:%d",p/numa);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询