2015盏灯,一开始全部熄灭,序号分别是1-2015,先把1的倍数序号的灯的开关全部按一次,然后把2的倍数的灯的开关全部按一次,然后把3的倍数的开关按一次,以此类推,最后把2015的倍数灯的开关按一次。问最后亮着的灯有多少盏?

  • 43
  • 44
  • 45
  • 46
3 5 收藏


直接登录
最新评论
  • saint86 搬砖工 2016/01/25

    44个
    不知道这个想法对不对,这个方法比较笨,晚上再想想有没有更舒服的算法
    #encoding=utf-8
    count = 0 # 点亮的灯泡总数
    for i in range(1, 2016): # 遍历灯泡
    light = 0 # 是否点亮
    click = 0 # 点击次数
    for bulb in range(1, 2016):
    if i % bulb == 0:
    click += 1
    if click % 2 != 0:
    count += 1
    else:
    count -= 1
    print(count)

    • sdkl   2016/01/25

      笔试啊大哥,你怎么跑你的程序

      • saint86 搬砖工 2016/01/26

        我又修改了一下,但是我不跑程序,这个真不会什么速算的法子。。。
        #encoding=utf-8
        count = 0
        for bulbID in range(1,2016):
        max_time = bulbID # 一个灯泡会在max_time的检测中被处理,一个灯泡只能被>=他序号的数字检测
        button = 0 # 点击次数,初始化为0
        index = 1 # 初始化检测数字
        while index <= max_time:
        if bulbID % index == 0:
        button += 1
        index += 1
        if button % 2 != 0: # 如果一个灯泡被点击的次数是单数,那他就是被点亮的
        count += 1
        print(count)

  • 苗 ︶ㄣ   2016/01/25

    感觉就是求1-2015 每个数能被多少个正整数整除,个数为奇数则亮着,偶数就不亮。

  • 南十字 励志成为码农的小猿 2016/01/25

    44个,仔细分析问题,就是1~2015个数中,哪些数的因子是奇数个,只有这样才能这盏灯才会亮着,比如说,4可分解为1*2*4,因子数为3,被按3次,所以最后亮着。那因子为奇数个的自然数的特征是什么呢,答案就是这个数一定是平方数,比如4,9,16等,问题可简化为1~2015有多少个平方数,粗略一算就是44个了,求赞

  • 四环的守护者 MTS 2016/01/25

    等同于求2015个数里有多少个数的因数是偶数,比如1—10,对于10来说1,2,5,10分别按一次开关,最后的状态是亮着的。

  • 王先生 学生 2016/01/26

    答案为44个 44^2<2015<45^2
    原因如下:
    开关每按一次改变一下灯的状态,由于一开始都是熄灭的,所以经过奇数次变化灯为亮着的,问题就演化为哪些数有奇数个约数,如1,4,9,16…..等等,也就是求有多少个平方数的问题,于是可得有44灯亮着。
    大家如有更好的方法,欢迎批评指正。

  • 李万戟   2016/01/27

    答案是44

  • 代码届王大锤 写代码 2016/01/27

    这个题目太难了

  • 猜测的44

  • 简化成2015最多X的平方

  • 先说答案 44
    原理: 只有奇数次的开关才能亮灯。
    除1之外所有的数必然可以分解成两个不同数字的积,如20可分成4*5,2*10等,因此若开关次数想为奇数,则该数必然可以分解成两个相同数字的积,如1,4,9,16.所以这题就是问2015内平方数的个数。

  • Abstraction 学生 2016/02/08

    发现要有奇数个约数了,但不知那就是平方数啊,数学是硬伤

  • Alex   2016/03/27

    当且仅当一个数有奇数个约数时才能亮
    设X=p1^a1 * p2^a2 * … * pk^ak
    约数个数count = (a1+1) * (a2 + 1) * …. * (ak + 1)
    如果count要是奇数,则(a1 + 1), (a2 + 1), (a3 + 1), …, (ak + 1)均是奇数
    则a1, a2, a3, …, ak均是偶数
    所以X可以变为
    X = (p1^(a1/2) * (p2^(a2/2) * … * (pk^(ak/2)))) ^ 2
    也就是说X是完全平方数

  • cage   2016/06/16

    44.

    这道题目可以这样转换,每个的约数总数是判断是奇数,还是偶数,奇数则灯亮,偶数则灯灭。

  • cage   2016/06/16

    开头老想着写代码,结果用了笨办法,约数为奇数才能亮,只有约数的平方为数本身才会有,这样的就可以用1的平方,2的平方,3的平方,N的平方刚好最大小于2015,就是总数了,而其中45*45=2025,所以就是44*44.所以值是44.

  • 我说下我的思路,看到2015时,我觉得太大了。于是,我就拿小一些数试一试,看看有没有规律。比如说6的约数1,2,3,6。那样6就是关了。再看看9的约数1,3,9。那就9就是开了。我发现只要这个数不是某个数的平方,那它的约数都是对称的,也就是偶数个,最后肯定是关了。所以求开的就是求平方数了

  • 晓雨落风 全栈工程师 2016/06/23

    lightOn = 0
    for seq in range(1,5):
    #count click num
    click = 0
    for x in range(1,seq+1):
    if seq%x == 0:
    #give the light a click
    click += 1
    if click%2 == 1:
    #the light is ON
    lightOn += 1
    print lightOn

     

    我写了段脚本,执行后结果是44,

    但我好奇的这是道笔试题,笔试时不用程序怎么笔算出44??

  • 想了好久为什么是平方数,原来如果这个数可以被两个不同的数A和B乘积的话,A按一次,B按一次就抵消了。所以只有平方数,没法按两次。在平方数时会改变状态。