zoukankan      html  css  js  c++  java
  • 杭电 2028 ( Lowest Common Multiple Plus )

      链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2028

      题目要求:就是求最大公倍数,我百度了一下,最好实现的算法就是:

          公式法
    由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)×[a,b]=a×b。所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。
      例如,求[18,20],即得[18,20]=18×20÷(18,20)=18×20÷2=180。求几个自然数的最小公倍数,可以先求出其中两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,依次求下去,直到最后一个为止。最后所得的那个最小公倍数,就是所求的几个数的最小公倍数。    
      总结下就是:两数乘积=两数最大公约数*两数最小公倍数。 只不过这次用到的是 两数最小公倍数=两数乘积/两数最大公约数。每两个数个一组依次向后求就可以了。 
      然后在ac之前犯了个毛病,就是数据类型我全部是int,然后题目要求中有一句:你可以假设最后的输出是一个32位的整数。然后就有个问题:相乘过界。就是过界问题,可能两数相乘会超过 int 的最大界限,所以最好是先除。或者把类型变掉,我选择后者。
    #include <iostream>
    #include<math.h>
    #include <iomanip>
    #include<cstdio>
    #include<string>
    #include<map>
    #include<vector>
    #include<list>
    #include<algorithm>
    #include<stdlib.h>
    #include<iterator>
    using namespace std;
    
    int gcd(int a,int b)
    {
        int big=a;
        int smal=b;
        int ck;
        if(big<smal)
        {
            ck=a;
            a=b;
            b=a;
        }
        int temp;
        while(smal>0)
        {
            temp=big%smal;
            big=smal;
            smal=temp;
        }
        return big;
    }
    
    unsigned int gys(unsigned int a,unsigned int b)
    {
        unsigned int kk;
        unsigned int ak=a;
        unsigned int bk=b;
        kk=ak*bk/gcd(ak,bk);
        return kk;
    }
    
    int main()
    {
    
        int n;
        while(cin>>n)
        {
        unsigned int *p;
        p=new unsigned int[n];
    
        for(int i=0;i<n;i++)
        {
            cin>>p[i];
        }
    
        int unsigned max_gys=p[0];
    
        for(int j=0;j<n-1;j++)
        {
            max_gys=gys(max_gys,p[j+1]);
        }
        cout<<max_gys<<endl;
    
        delete []p;
        }
    
    
    
        return 0;
    }
      
  • 相关阅读:
    AtCoder Grand Contest 49
    Kotlin Heroes 5: ICPC Round 题解 (A-H)
    轮盘赌随机选择算法
    洛谷P1579.验证哥德巴赫猜想(DFS+素性测试)
    洛谷P1308.统计单词数(字符串匹配)
    洛谷P1149.火柴棒等式(暴力搜索)
    洛谷P1036.选数(DFS)
    洛谷P1028.数的计算(动态规划)
    Python对list操作的一些小技巧
    图的DFS和BFS(邻接表)
  • 原文地址:https://www.cnblogs.com/William-xh/p/6852933.html
Copyright © 2011-2022 走看看