(HDU)1019 --Least Common Multiple(最小公倍数)

描述
一组正整数的最小公倍数(LCM)是可以被集合中所有数字整除的最小正整数。 例如,5,7和15的LCM为105。

输入
输入将包含多个问题实例。 输入的第一行将包含指明问题实例数量的单个整数。 每个实例将由形式为m n1 n2 n3 ... nm的单行组成,其中m是集合中的整数数目,n1 ... nm是整数。 所有整数将为正,位于32位整数的范围内。


输出
对于每个问题实例,输出包含相应LCM的单行。 所有结果将位于32位整数的范围内。


样例输入
2
3 5 7 15
6 4 10296 936 1287 792 1
样例输出
105
10296
查看问题

求最小公倍数问题,一个蠢办法是从第一个开始一个个试:

 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8 
 9     int n,m,a,k;
10     while(scanf("%d",&n)!=EOF&&n)
11     {
12         while(n--)
13         {
14             scanf("%d",&m);
15             int t=1;
16             while(m--)
17             {
18                 int i=2;
19                 scanf("%d",&a);
20                 k=a;
21                 while(a%t!=0)
22                 {
23                     a=k*i;
24                     i++;
25                 }
26                 t=a;
27             }
28             printf("%d
",a);
29         }
30     }
31     return 0;
32 }
暴力法

这题可以找出里面最大的正整数,再进行翻倍找最小公倍数。

 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int t,n,i,num[100010];
 9     while(~scanf("%d",&t)&& t)
10     {
11         while(t--)
12         {
13         int lcm,max_num=0;
14         scanf("%d",&n);
15         for(i=1;i<=n;i++)
16         {
17             scanf("%d",&num[i]);
18             if(num[i]>max_num) max_num=num[i];
19         }
20 
21         lcm=max_num;
22         for(i=1;i<=n;i++)
23             while(lcm%num[i]!=0)
24                 lcm+=max_num;
25         printf("%d
",lcm);
26         }
27     }
28     return 0;
29 }
代码(有问题)

不过这个代码提交似乎会WA,目前原因未知。

原文地址:https://www.cnblogs.com/ACDoge/p/6125498.html