Lowest Common Multiple Plus
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 51502 Accepted Submission(s): 21359
Problem Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4 63 2 5 7
Sample Output
1270
Author
lcy
Source
Recommend
lcy
解题思路(1):
首先定义一个函数,判断两个数的最小公倍数。用辗转相除法。
然后两两判断;
代码:
#include<stdio.h> int f(int x,int y) { int a,b,t,m; a=x;b=y; if(x>y) { t=x; x=y; y=t; } while(x!=0) { t=y%x; y=x; x=t; } m=(a/y)*b; return m; } int main() { int i,n,a[110],s; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); if(n==1) printf("%d\n",a[0]); else { s=f(a[0],a[1]); for(i=1;i<n;i++) s=f(s,a[i]); } printf("%d\n",s); } return 0; }
解题思路(2):
先找出这组数据的最大值,然后用循环逐渐往上加,知道除于任何数余数都为零。
代码:
#include<stdio.h> int main() { int i,n,s[500],a; while(scanf("%d",&n)!=EOF) { a=0; for(i=1;i<=n;i++) { scanf("%d",&s[i]); if(a<s[i]) a=s[i]; } for(i=1;i<=n;i++) { if(a%s[i]!=0) { a++; i=0; } } printf("%d\n",a); } return 0; }