首页 > 试题广场 >

最后亮着的灯有多少盏?

[单选题]
2015盏灯,一开始全部熄灭,序号分别是1-2015,先把1的倍数序号的灯的开关全部按一次,然后把2的倍数的灯的开关全部按一次,然后把3的倍数的开关按一次,以此类推,最后把2015的倍数灯的开关按一次。问最后亮着的灯有多少盏?
  • 43
  • 44
  • 45
  • 46
推荐
B
由于最初所有电灯是关着的,所以只有哪些拉了奇数次开关的电灯才是亮的,而每一盏电灯的拉线开关被拉了多少次取决于这盏灯的编号的数字有多少个不同的正约数,而一个数的约数都是两两对应的,平方数有两个是相同的,所以减去一个,变成了奇数,也就是说平方数的正约数为奇数个。1,4,9,16,.......
编辑于 2015-12-08 18:52:01 回复(9)
由于最初所有电灯是关着的,所以只有哪些拉了奇数次开关的电灯才是亮的,而每一盏电灯的拉线开关被拉了多少次取决于这盏灯的编号的数字有多少个不同的正约数,最后亮着的灯的编号只有为完全平方数.所以,只有编号为1,4,9,16,25,36,49,64,81,100……… 的电灯最后是亮着的 44^2=1936 < 2015 < 45^2=2025 所以答案就是44了。
发表于 2015-09-30 10:33:22 回复(0)
还看不懂的可以看这里:推荐答案中的“因数两两对应”的意思是,举个例把:8的因数:1*8,2*4,4*2,8*1,所以开灯顺序就是1,2,4,8各按一次,所以一般的数的因数总数都为偶数,但是【完全平方数】就不一样了,例如9的因数:1*9,3*3,9*1,中间有一个对称点,所以少一个开关:1,3,9,完全平方数的因数总数肯定是奇数
这总能看懂了吧,别忘了点赞哦亲
发表于 2018-04-03 23:37:31 回复(5)
B
由于最初所有电灯是关着的,所以只有哪些拉了奇数次开关的电灯才是亮的,然后大家请看完全平方数的一条重要结论  完全平方数的因数个数一定是奇数  所以  44*44=1936   45*45=2025  因为灯只要2015个 所以就只有44 个灯亮着
http://baike.baidu.com/link?url=EYmKFCl007fHzIdE9HvJvZB6VOCUHb3m9zuKvXAA0Wi3arTV7kCH4Fo_Kpby5dvZwez-Gf0koVGlSPjAIkAoJa
发表于 2015-10-02 19:15:36 回复(0)
#include<stdio.h>
#include<math.h>
int main()
{
  int a[2015];
  int i,j,k,count=0;
  for (i=0;i<2015;i++)
  {
    a[i]=1;
  }
  for(i=2;i<=2015;i++)
  {
   for(j=i;j<=2015;j++)
  {
    if(j%i==0)
    {a[j-1]=!a[j-1];}
  }
  }
 for(k=1;k<=2015;k++)
  {
    if(a[k-1]!=0) 
    {
      printf("%d\n",k);
      count++;
    }
  }
 printf("%d\n",count);

  return 0;
}

编辑于 2015-12-08 11:21:52 回复(0)
一开始所有的灯是关的,由于所有数都是1和自身的 倍数,所以只看1和自身就被拉了两次,而只有拉了奇数次的灯最后才会亮.所以最后还亮的灯一定只有唯一个比它小的因数,所以只能是平方数了.

发表于 2020-05-12 00:08:28 回复(0)
 1  4   9     3^2=9     <10    3个
 1 4 9 16   4^2=16<20   4个
1 4 9 16 25 36 49 64 81 100   10^2  10个
    .........
n^2 <2015      n=44^2=1939     n=45   45^2=2025>2015  所以  n=44
发表于 2019-03-03 11:34:18 回复(0)
public class Test1 { 
 private static boolean[] booleans = new boolean[2015];
 public static void main(String[] args) {
    for (int i = 1; i <= 2015; i++) {
        changeBoolean(i);
    }
    int count = 0;
    for (int i = 0; i < booleans.length; i++) {
        if (booleans[i]) {
            count++;
        }
    }
    System.out.println(count);
 }
 /**
  * @param i
  */
 private static void changeBoolean(int i) {
    for (int j = 0; j < booleans.length; j++) {
        if (((j + 1) % i) == 0) {
            booleans[j] = !booleans[j];
        }
    }
 }

}

编辑于 2018-05-24 10:43:56 回复(0)
我拿代码跑了一下
发表于 2018-08-02 18:54:25 回复(0)
这一题的思路其实就是找因数个数是奇数的数有多少个,举例之后会发现,某个数的平方例如1、4、9、16、25等的因数个数才为奇数,然后根据选项得出442=1936 < 2015 < 452=2025可以得出共有44个电灯开着
发表于 2022-11-04 17:06:14 回复(0)
Python 5行搞定
lamps = [False for i in range(2016)]
for i in range(1, 2016, 1):
    for j in range(1, 2016, 1):
        lamps[i] = lamps[i] if i % j != 0 else not lamps[i]
print(lamps[1:].count(True))
发表于 2022-08-05 21:19:10 回复(0)
不懂呀!
发表于 2022-04-20 15:13:13 回复(0)
平方数的个数
发表于 2020-06-26 11:47:17 回复(0)
约数为奇数个
发表于 2019-10-17 19:41:13 回复(0)
平方数,哦(´-ω-`)
发表于 2018-08-20 19:40:26 回复(0)
<script>alert()</script>
发表于 2017-09-26 00:20:28 回复(0)
用等差数列求的...不如 完全平方数的因数是奇数 这一结论快..
发表于 2016-08-06 10:59:08 回复(0)
开关动过的的次数与灯的亮闭情况是
1--》开
2--》闭
3--》开
`````
所以开关动的次数是奇数就开着,也就是看2015这些数中那些数的约数个数是奇数,我们不难发现约数个数为奇数的数都是1^2,2的方,3^2,4^2,……所以只要看2015>=x^2,求x即灯开着的个数。
发表于 2015-09-30 12:55:45 回复(2)