POJ 3970(最小公倍数LCM)

Posted yutingliuyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3970(最小公倍数LCM)相关的知识,希望对你有一定的参考价值。

??

知识点:

     最小公倍数(a,b)=a*b/最大公约数(a。b)



                                                                                                           Party


Description

The CEO of ACM (Association of Cryptographic Mavericks) organization has invited all of his teams to the annual all-hands meeting, being a very disciplined person, the CEO decided to give a money award to the first team that shows up to the meeting. 

The CEO knows the number of employees in each of his teams and wants to determine X the least amount of money he should bring so that he awards the first team to show up such that all team members receive the same amount of money. You must write a program to help the CEO achieve this task.

Input

The input consists of multiple test cases, each test case is described on a line by itself, Each line starts with an integer N (1 <= N <= 20) the number of teams in the organization followed by N space separated positive integers representing the number of employees in each of the N teams. You may assume that X will always fit in a 32 bit signed integer. The last line of input starts with 0 and shouldn‘t be processed.

Output

For each test case in the input print "The CEO must bring X pounds.", where X is as described above or "Too much money to pay!" if X is 1000000 or more. 

Sample Input

1 3000000
2 12 4
0

Sample Output

Too much money to pay!
The CEO must bring 12 pounds.


#include<iostream>
#include<cstdio>

using namespace std;

__int64 num[30];

__int64 gcd(__int64 a,__int64 b)
{
    __int64 r;
    __int64 t;
    if(a<b)
    {
        t=a;
        a=b;
        b=t;
    }
    r=a%b;
    while(r)
    {
        a=b;
        b=r;
        r=a%b;
    }
    return b;
}

__int64 lcm(__int64 a,__int64 b)
{
    return a*b/gcd(a,b);        //假设是int ,a*b将会溢出,造成错误
}


int main()
{
   int t;
   __int64 res;
   while(scanf("%d",&t),t)
   {
       for(int i=0;i<t;i++)
        scanf("%I64d",num+i);
       res=num[0];
       //cout<<gcd(num[0],num[0]);

       for(int i=1;i<t;i++)
        res=lcm(num[i],res);

       if(res>=1000000)
           printf("Too much money to pay!\n");
        else
            printf("The CEO must bring %I64d pounds.\n",res);
   }
   return 0;
}




以上是关于POJ 3970(最小公倍数LCM)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2429 GCD & LCM Inverse(Pollard_Rho+dfs)

GCD & LCM Inverse POJ 2429(Pollard Rho质因数分解)

Biorhythms POJ 1006(中国剩余定理)

POJ1852 Ants

POJ2429--GCD & LCM Inverse (UNSOLVED)

51nod 1012 最小公倍数LCM