zoukankan      html  css  js  c++  java
  • LETTers比赛第三场 1001 Least Common Multiple 解题报告

    提交人:侯建鹏

    提交日期:2012/4/16

    1001 Least Common Multiple

      这道题求解的是几个数的最小公倍数,我的想法是先求前两个数的最小公倍数,再求的得到的这个数和第三个数的最小公倍数,以此类推。

    求解两个数a和b的最小公倍数d的方法:

    1、  用辗转相除法求出这两个数的最大公约数,记为c。

    2、  则最小公倍数d=(a/c)*b。

    特别注意的问题:为什么d=(a/c)*b而不是d=(a*b)/c?

      因为a和b都是32bit的数字,如果先执行a*b很可能会超出32bit的存储范围而发生错误,所以先除再乘。(当然,如果你用的是__int64,可以忽略这个问题)

    #include<stdio.h>
    
    int number[1010];
    
    int MD(int a , int b )
    {
        int r=a%b;
        while(r)
        {
            a=b;
            b=r;
            r=a%b;
        }
        return b;
    }
    
    int main()
    {
        //freopen("input.txt","r",stdin);
        int cas,num,md,i;
        scanf("%d",&cas);
        while(cas--)
        {
            scanf("%d",&num);
            for(i=0;i<num;i++)
            {
                scanf("%d",&number[i]);
                if(i!=0)
                {
                    md=MD(number[i-1],number[i]);
                    number[i]=number[i-1]/md*number[i];
                }
            }
            printf("%d\n",number[num-1]);
        }
        return 0;
    }

     

  • 相关阅读:
    Lyft Level 5 Challenge 2018
    Codeforces Round #514 (Div. 2)题解
    Bubble Cup 11
    不如来搞一下CDQ分治吧!
    Codeforces Round #331 (Div. 2)
    写一下中国剩余定理的证明
    codeforces Round#332Div2 题解
    GCPC2017 题解
    2017 USP Try-outs 题解
    CodeForce 387D. George and Interesting Graph
  • 原文地址:https://www.cnblogs.com/LETTers/p/2452696.html
Copyright © 2011-2022 走看看