C语言求两个数的最大公约数和最小公倍数

来源:百度知道 编辑:UC知道 时间:2024/06/15 05:28:19
这是我代码:#include<stdio.h>
int main()
{
unsigned a,b;
int i,j;
scanf("%d%d",&a,&b);
i=a;
j=1;
while (j<=a*b)
{
if (j%a==0&&j%b==0)
{
printf("%d ",j);
break;
}
else
j++;
}
while (i>0)
{
if (a%i==0&&b%i==0)
{
printf("%d",i);
break;
}
else
i--;
}
return 0;
}
但是我提交的时候说我这个程序超时了。请问哪里改一下是不是就可以不超时了,还有如果大家有更好的方法请发上来。

#include<stdio.h>

void main()
{
int a,b,t;
int r,x;
printf("Input two numbers!\n");
scanf("%d,%d",&a,&b);
x = a * b;
if (a < b)
{
t = a;
a = b;
b = t;
}
while (b != 0)
{
r = a % b;
a = b;
b = r;
}
printf("最大公约数为:%d\n",a);
printf("最小公倍数为:%d\n",x/a);
}

楼主学习着用最优算法吧,像这样的题它考的就是你会不会用最优算法去写程序,从1开始遍历,是最古老,花费时间最多的算法,它往往是不可取的

楼上2位写的算法其实都是一个意思

我用for循环描述一下吧

int g_cd(int m, int n) //最大公约数算法
{
int a,b; //小的为a,大的为b
if (m>n)
{
a=n;
b=m;
}
if (m<n)
{
a=m;
b=n;
}
if (m==n)
return m;

int temp=0;
for(;b%a!=0;a=temp%a) //b与a的相除的余数肯定含有最大公约数
{
temp=b;
b=a; //每次计算之后将上一轮的a给下一轮temp计算,从余数里找
}
return a; //当不满足循环条件时,a就为最大公约数
}