关于公约数与公倍数问题

#include <stdio.h>
#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {
int n,i,j,k,a,b;
scanf("%d",&n);
while(n--){
scanf("%d%d",&i,&j);
if(i<=j){
for(a=i;a>=1;a--)
if(i%a==0&&j%a==0)
break;
for(b=j;b<=32767;b++)
if(b%i==0&&b%j==0)
break;
printf("%d %d\n",a,b);
}
else
{for(a=j;a>=1;a--)
if(i%a==0&&j%a==0)
break;
for(b=i;b<32767;b++)
if(b%i==0&&b%j==0)
     break;
printf("%d %d\n",a,b);
}
}
return 0;

}

这是见到问题最笨拙的代码,没有考虑时间复杂度,虽然能够顺利得到正确答案,但运行超时,所以需要用到辗转相除法。

主要思路即利用相除的余数求出最大公约数,然后利用最小公倍数与最小公约数的关系得出结果。



猜你喜欢

转载自blog.csdn.net/lutowhite/article/details/80145660