• 【lightoj-1024】Eid (高精度)


    【题意】

    给定n个数,求这n个数的最小公倍数。

    【题解】

    最小公倍数当然不能按常规方法来求,因为最大的数将近是10000^1000级别的。然鹅最小公倍数怎么搞呢?

    这里发现了一个规律:

    4

    5 6 30 60

    5 : 5 //说明最小公倍数的因子中一定有一个5

    6 : 2*3 //说明最小公倍数的因子中一定有一个2和一个3;

    30 : 2*3*5 //说明最小公倍数的因子中一定有一个2和一个3和一个5;

    60 : 2^2*3*5 //说明最小公倍数的因子中一定有2个2和一个3和一个5;

    所以我们可以忽略那些个数比较少的, 找到说明结果中一定含有 2个2 1个3 1个5;

    最后要用到高精度乘法。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    int a[10003], b[5000];
    void Mul(int b[], LL n)
    {
        int i;
        for(i = 1; i <= b[0]; i++) b[i] *= n;
        for(i = 1; i <= b[0]; i++) b[i+1] += b[i] / 10, b[i] %= 10;
        while(b[i]) b[i+1] += b[i] / 10, b[i] %= 10, i++, b[0]++;
    }
    LL q_pow(int x, int y)
    {
        LL ans = 1;
        while(y)
        {
            if(y&1) ans *= x;
            x *= x;
            y >>= 1;
        }
        return ans;
    }
    int main()
    {
        int t, n, i, cas = 0, m;
        cin>>t;
        while(t--)
        {
            scanf("%d", &n);
            memset(a, 0, sizeof(a));
            int max1 = 0;
            while(n--)
            {
                scanf("%d", &m);
                max1 = max(max1, m);
                for(i = 2; i <= m; i++)
                {
                    int tep = 0;
                    while(m % i == 0)
                        tep++, m /= i;
                    a[i] = max(a[i], tep);
                }
            }
            memset(b, 0, sizeof b);
            b[1] = 1, b[0] = 1;
            for(i = 2; i <= max1; i++)
            {
                if(a[i] != 0)
                    Mul(b, q_pow(i, a[i]));
            }
            printf("Case %d: ", ++cas);
            for(i = b[0]; i >= 1; i--)
                printf("%d", b[i]);
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    献给正在奋斗的人
    Delphi TRzTreeView 或者TRzCheckTree或者TTreeView离开焦点还显示灰色的选择状态
    笑话(三)
    王永庆建立企业奖励机制
    DbGridEh表格Tile居中,但是内容左对齐的做法
    DelPhi LockWindowUpdate的函数的用法
    Delphi DbgridEh实现鼠标拖动选中列,并使复选框选中
    国足输球,总结原因
    TPath
    TMemoryStream、String与OleVariant互转
  • 原文地址:https://www.cnblogs.com/lesroad/p/8406141.html
Copyright © 2020-2023  润新知