公约数和公倍数

来源:互联网 发布:网络谣言治理 编辑:程序博客网 时间:2024/04/30 13:12

公约数和公倍数

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数。
输入
第一行输入一个整数n(0<n<=10000),表示有n组测试数据;
随后的n行输入两个整数i,j(0<i,j<=32767)。
输出
输出每组测试数据的最大公约数和最小公倍数
样例输入
36 612 1133 22
样例输出
6 61 13211 66
#include"stdio.h"int main(){ int u,v,d,n,r;scanf("%d",&n); while(n--) {scanf("%d%d",&u,&v);d=u*v;while(v!=0){r=u%v;u=v;v=r;}printf("%d %d\n",u,d/u);}return 0;}


此题应该用辗转相除法,若用一般方法进行for循环则会出现超时!

例如:求4453和5767的最大公约数时,可作如下除法.

5767÷4453=1余1314

4453÷1314=3余511

1314÷511=2余292

511÷292=1余219

292÷219=1余73

219÷73=3

73÷0=0

于是得知,5767和4453的最大公约数是73. 辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.

 
原创粉丝点击