HDoj 2028 Lowest Common Multiple Plus(最小公倍数、最大公約数)

2273 ワード

Lowest Common Multiple Plus
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 49546    Accepted Submission(s): 20479
Problem Description
n個数の最小公倍数を求める.
 
Input
入力には複数のテストインスタンスが含まれ、各テストインスタンスの開始は正の整数nであり、次いでnの正の整数である.
 
Output
各テスト・データのセットに対して最小公倍数を出力し、各テスト・インスタンスの出力は1行を占めます.最後の出力は32ビットの整数だと仮定できます.
 
Sample Input

   
   
   
   
2 4 6 3 2 5 7

 
Sample Output

   
   
   
   
12 70
#include <iostream>
#include <cstdio>
using namespace std;

int f(int a,int b)
{
    int m;
    int t;
    int ta=a,tb=b;
    if(a<b)
    {
        t=a;a=b;b=t;
    }
    while(b)
    {
        m=a%b;
        a=b;
        b=m;
    }
    return ta/a*tb;//       
}
int main()
{
    long long sum;
    int n,a[110];
    while(~scanf("%d",&n))
    {
        sum=1;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum=f(sum,a[i]);
        }
        printf("%lld
",sum); } return 0; } #include <cstdio> int f(int a,int b) { int t; int m; if(a<b) { t=a;a=b;b=t; } while(b) { m=a%b; a=b; b=m; } return a;// } int main() { int m; int n,a[110]; while(~scanf("%d",&n)) { scanf("%d",&a[0]); for(int i=1;i<n;i++) { scanf("%d",&a[i]); m=f(a[i-1],a[i]); a[i]=a[i-1]/m*a[i]; } printf("%d
",a[n-1]); } return 0; }