Lowest Common Multiple Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 73046 Accepted Submission(s): 30342
Problem Description 求n个数的最小公倍数。 Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。 Output 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。 Sample Input 2 4 6 3 2 5 7 Sample Output 12 70 这个题有两种算法,一种是找最大数的倍数,另一种就是辗转相除法 我这里先贴上第一种方法,两个程序 /* #include<stdio.h> int time(int a,int b) { int i,t; if(a>b) { for(i=1;;i++) { if(a*i%b==0) { return (a*i); break; } } } else { for(i=1;;i++) { if(b*i%a==0) { return (b*i); break; } } } } int main() { int a[1000]; int t,i,timesum,min1; while(scanf("%d",&t)!=EOF) { for(i=0;i<t;i++) scanf("%d",&a[i]); timesum=a[0]; for(i=1;i<t;i++) { timesum=time(timesum,a[i]); } printf("%d\n",timesum); } return 0; } */ #include<stdio.h> int main() { int n,q; int a[100]; while(scanf("%d",&n)!=EOF) { int i,j,h; for(i=0;i<n;i++) { scanf("%d",&a[i]); } int max=0,f; for(i=0;i<n;i++) { if(a[i]>=max) { max=a[i]; f=i; } } q=0,j; for(j=1;;j++) { q=0; for(i=0;i<n;i++) { if((a[f]*j)%a[i]!=0) { q=1; break; } } if(q==0) { printf("%d\n",a[f]*j); break; } } } return 0; } 辗转相除法,可以学习一下,这个算法很好,求这种问题。。。 |