1987: 最小公倍数

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;
}

运行结果:
在这里插入图片描述
**总结:**注意题目中可能会出现时间超限的问题,如果用辗转相减求最大公约数会出现时间超限的问题,此题要用辗转相除法求最大公约数

猜你喜欢

转载自blog.csdn.net/qq_43730272/article/details/86428296