1987: 最小公倍数
时间限制: 1 Sec 内存限制: 0 MB
提交: 37 解决: 14
[提交][状态][讨论版]
题目描述
给定一个整数n,求从1到n这n个整数的最小公倍数。
输入第一行一个整数t(0<t<=100),代表测试数据的组数。
接下来t组测试数据,每行一个整数n(1<=n<=42),n的含义如题目所述。
输出对于每个整数n,输出从1到n这n个整数的最小公倍数,每个输出占一行。
样例输入
2
1
4
样例输出
1
12
提示
求最大公约数用辗转相除法
题目网址:
**题意:**多实例测试,求解从1到n的最小公倍数
**思路:**先求前两个数的最小公倍数,然后用他们的最小公倍数与第三个数再求最小公倍数,以此类推,便可求出。
代码:
#include<stdio.h>
int main()
{
long long int n,m,a,b,c,d,t;//1到42的最小公倍数int存不下
scanf("%lld",&m);
while(m--)
{
c=1;d=1;
scanf("%lld",&n);
while(n--)
{
a=c;b=d;//保留所求的值 以便求最小公倍数
while(b)//辗转相除求最大公约数 a为最大公约数
{
t=a%b;
a=b;
b=t;
}
c=c*d/a;//c为前面所求位数的最小公倍数
d++;//d是下一位数
}
printf("%lld\n",c);
}
return 0;
}
运行结果:
**总结:**注意题目中可能会出现时间超限的问题,如果用辗转相减求最大公约数会出现时间超限的问题,此题要用辗转相除法求最大公约数