zoukankan      html  css  js  c++  java
  • [Project Euler] 来做欧拉项目练习题吧: 题目005(转)

       [Project Euler] 来做欧拉项目练习题吧: 题目005

                                                                周银辉 

    问题描述:

    2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

    What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? 

     (先思考,如果有兴趣先编程试试,然后才看下面的内容)  

    问题分析:

    求能被1到20的数整除的最小正整数。最直觉的方法是求1到20这20个数的最小公倍数。

    求n个数的最小公倍数,以a,b,c三个数为例,他们的最小公倍数等于:先求a与b的最小公倍数m,然后m和c的最小公倍数即着三个数的最小公倍数。

    求两个数a,b的最小公倍数嘛,先取出其中较大的那个比如a,然后再用k*a去试探能否被较小那个数整除,其中,k是从1开始的自然数 k*a<a*b 

    int get_lcm(int a, int b)
    {
    if(a==b)
    {
    return a;
    }
    int bigger = a<b?b:a;
    int smaller= a<b?a:b;
    int max = a*b;
    int i;
    for(i=bigger; i<max; i+=bigger)
    {
    if(i%smaller == 0)
    {
    return i;
    }
    }
    return max;
    }

    另外一种比较好的方法,以n取10为例

    2,3,4,5,6,7,8,9,10 (1没有什么意义,忽略掉了)

    将这些数字分解质因数:

    2,  3,  2*2,  5,  2*3,  7,  2*2*2,  3*3,  2*5

    这些质数分别是2, 3, 5, 7

    最终答案可以表示为:

    2^a * 3^b * 5^c * 7^d   (其中,x^y表示x的y次方)

    其中的英文字母表示在上面分解质因数时所得到的表达式中质因数在同一个表达式中出现的次数的最大值

    质因数2出现次数最多是在8=2*2*2中,其出现了3次,所以a为3

    同理可得到:2^3 * 3^2 * 5^1 * 7^1 = 2520 

    注:当完成题目后,对于某些题,官方网站会给出参考答案,在我的博客里不会将官方答案贴出来,仅仅会写下我自己当时的思路,除非两者不谋而合。另外,如果你有更好的思路,请留言告诉我,我非常乐意参与到讨论中来。  

  • 相关阅读:
    sqlite数据库如何远程连接?
    redis的两种持久化方案
    Netty入门系列(1) --使用Netty搭建服务端和客户端
    使用MQ消息队列的优缺点
    Netty基础系列(3) --彻底理解NIO
    Netty基础系列(2) --彻底理解阻塞非阻塞与同步异步的区别
    Netty基础系列(1) --linux网路I/O模型
    Jedis异常解决:NOAUTH Authentication required
    java并发编程(2) --Synchronized与Volatile区别
    java并发编程(1) --并发基础及其锁的原理
  • 原文地址:https://www.cnblogs.com/junzhkevin/p/1969607.html
Copyright © 2011-2022 走看看