Least Common Multiple&&http://acm.hdu.edu.cn/showproblem.php?pid=1019

来源:互联网 发布:java 代码覆盖率 编辑:程序博客网 时间:2024/06/16 15:18
Problem Description
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.


Input
Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 ... nm where m is the number of integers in the set and n1 ... nm are the integers. All integers will be positive and lie within the range of a 32-bit integer.

Output
For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.

Sample Input
23 5 7 156 4 10296 936 1287 792 1

Sample Output
10510296
题意:给你一些数,求它们的最小公倍数,,,这是一道数论题,本以为过不了的,没想到数据那么水~~~
AC代码:
#include<iostream>#include<string.h>#include<cstdio>#include<cmath>#include<algorithm>#include<cmath>#define N 1005using namespace std;int prim[N];bool s[1000005]={1,1,0};int num[N];int res;void init(){memset(num,0,sizeof(num));}void _prim(){res=0;memset(prim,0,sizeof(prim));int m=sqrt(1000005+0.5);for(int i=2;i<=m;++i)if(!s[i]){prim[res++]=i;for(int j=i*i;j<=1000005;j+=i)s[j]=1;}}int _pow(int a,int b){int ans=1;while(b){if(b&1) ans*=a; a=a*a; b=b>>1;}return ans;}void in(int &a){char ch;while((ch=getchar())<'0'||ch>'9');for(a=0;ch>='0'&&ch<='9';ch=getchar()) a=a*10+ch-'0';}void out(int x){if(x>9) out(x/10);putchar(x%10+48);}int main(){int T;in(T);_prim();while(T--){init();int n;in(n);for(int i=0;i!=n;++i){int a;in(a);int ans=a;for(int i=0;i<res;++i){if(ans%prim[i]==0)   {   int cnt=0;   while(ans%prim[i]==0)  { cnt++; ans/=prim[i];   }   num[prim[i]]=max(num[prim[i]],cnt);   //cout<<prim[i]<<" "<<num[prim[i]]<<endl;    } if(ans==1) break;}//if (ans>1) num[ans]=max(num[ans],1);}int sum=1;for(int i=0;i<res;++i)if(num[prim[i]])  sum=sum*_pow(prim[i],num[prim[i]]);out(sum);printf("\n");}return 0;}