HDU 1019 (GCD 与 LMC)

题意给你一堆数,要求你求出他们LMC(最小公倍数)。首先两个是的最小公倍数是等于他们相乘再除一他们的GCD(最大公约数),那三个数的最大公倍数又怎么求呢?显然不能像之前那样做,现在给出一个定理:如果已知N个数的最小公倍数,那么再加一个数m,那这N+1个数的最小公倍数等于前N个数的最小公倍数和新加入的数m的最小公倍数。现在我们需要解决的问题只剩下GCD了。那GCD怎么求呢?

GCD递归定理:对任意非负整数a和任意正整数b,gcd(a, b) = gcd(b, a mod b)。当a mod b==0时可以轻易地求出gcd(b,a mod b)==b.这样所有我呢提就解决了。

#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
int gcd (int a, int b)
{
  return (b==0)?a:gcd (b,a%b);
}
int lcm(int a,int b)
{
  return a/gcd(a,b)*b;
}
int a[1000010];
int main ()
{
  int t,n;
  cin>>t;
  while (t--)
  {
  cin>>n;
  int LCM=1;
  cin>>a[0];
  LCM=a[0];
  for(int i=1;i<n;i++)
   {
    cin>>a[i];  
    LCM=lcm(LCM,a[i]);
   }
  cout<<LCM<<endl;;

  }

return 0;
}

时间: 2024-10-16 14:58:03

HDU 1019 (GCD 与 LMC)的相关文章

HDU 1019 Least Common Multiple (最小公倍数)

Least Common Multiple Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30285    Accepted Submission(s): 11455 Problem Description The least common multiple (LCM) of a set of positive integers is

HDU 1019 Least Common Multiple 数学题解

求一组数据的最小公倍数. 先求公约数在求公倍数,利用公倍数,连续求所有数的公倍数就可以了. #include <stdio.h> int GCD(int a, int b) { return b? GCD(b, a%b) : a; } inline int LCM(int a, int b) { return a / GCD(a, b) * b; } int main() { int T, m, a, b; scanf("%d", &T); while (T--)

HDU 1695 GCD 欧拉函数+容斥原理+质因数分解

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:在[a,b]中的x,在[c,d]中的y,求x与y的最大公约数为k的组合有多少.(a=1, a <= b <= 100000, c=1, c <= d <= 100000, 0 <= k <= 100000) 思路:因为x与y的最大公约数为k,所以xx=x/k与yy=y/k一定互质.要从a/k和b/k之中选择互质的数,枚举1~b/k,当选择的yy小于等于a/k时,可以

HDU 1695 GCD (数论-整数和素数,组合数学-容斥原理)

GCD Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y) = k. GCD(x, y) means the greatest common divisor of x and y. Since the number of choices may be very large, you're only required to output t

HDU 5726 GCD 区间GCD=k的个数

GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2742    Accepted Submission(s): 980 Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). There ar

hdu 1019 最小公倍数

简单题 注意__int64 的使用 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 Problem : 1019 ( Least Common Multiple )     Judge Status : Accepted RunId : 10599776    Language : C++   

hdu 4497 GCD and LCM(排列组合)

题目:hdu 4497 GCD and LCM 题目大意:给出三个数的最大公约数,和最小公倍数,问这三个数的排列组合关系. 解题思路:最小公倍数/最大公约数 ==  三个数不同部分的乘积.这样来考虑的话,三个数都要有最大公约数的部分,其余的部分就是由LCM / GCD 里面的因子构成.这里面的因子可能会有 2 2 3 这样的情况, 不同的因子之间是不会相互干扰的,但是相同的会出现问题,因为,不能同时将相同的因子都放在三个位置上,这样最大公约数就的要乘上这个因子.然后对于单种因子来考虑的话,每种因

HDU 2588 GCD (欧拉函数)

GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1013    Accepted Submission(s): 457 Problem Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes writt

HDU 1019 (多个数的最小公倍数)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1019 Least Common Multiple Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 61592    Accepted Submission(s): 23486 Problem Description The least comm