输入项 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
输出量 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。您可以假设最后的输出是一个32位的整数。
样本输入 2 4 6 3 2 5 7
样本输出
12 70
核心思想:
先gcd函数求出两个数的最大公约数;
再用lcm函数求出两个数的最小公倍数:最小公倍数可以用两个数的乘积除以他们的最大公约数得到;
函数nlcm求n个数的最小公倍数:第一个参数为一个数组,存放所有的数,第二个参数为数字个数n;
#include <stdio.h> #include <string.h> long gcd(long long a, long long b) { //求a,b的最大公约数 if(a%b == 0){ return b; } else{ return gcd(b,a%b); } } long long lcm(long long a, long long b) { //求a,b的最小公倍数 long result = (a*b)/(gcd(a,b)); return result; } long long nlcm(long long a[], long long n){ int i; for(i=0;i<n-1;i++){ a[i+1] = lcm(a[i],a[i+1]); //将a[i]和a[i+1]的最小公倍数存放在a[i+1]中 } return a[n-1]; //a[n-1]即为要求的n个数的最小公倍数 } int main(){ int i,n; long long a[10000]; while(scanf("%d",&n) != EOF){ int result = 0; for(i=0;i<n;i++){ scanf("%lld",&a[i]); //输入要求最小公倍数的n个数 } result = nlcm(a, n); printf("%d\n",result); } }