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
2 3 5 7 15 6 4 10296 936 1287 792 1
Sample Output
105 10296题意:给你一些数,求它们的最小公倍数,,,这是一道数论题,本以为过不了的,没想到数据那么水~~~AC代码:#include<iostream> #include<string.h> #include<cstdio> #include<cmath> #include<algorithm> #include<cmath> #define N 1005 using 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; }