E81086713E446D36F62B2AA2A3502B5EB155

Java杂家

杂七杂八。。。一家之言

BlogJava 首页 新随笔 联系 聚合 管理
  141 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
过道里依次挂着标号是1,2,3, ......,100的电灯泡,开始它们
都是灭着的。当第一个人走过时,他将标号为 1 的倍数的电灯泡的开关
线拉了一下;当第二个人走过时,他将标号为 2 的倍数的电灯泡的开关
线拉了一下;当第三个人走过时,他将标号为 3 的倍数的电灯泡的开关
线拉了一下;......  如此进行下去,当第一百个人走过时,他将标号为
100 的倍数的电灯泡的开关线拉了一下。
问:当第一百个人走过后,过道里亮着的电灯泡标号是多少?


我的思路:
设标号为K的灯泡被拉了L(K)次,那么当L(K)为奇数的时候,灯泡是亮的。
那么那些标号被拉了奇数次呢?
K=1时,很显然是只拉了1次,最后是亮的。
其次K>=2时,据题意,K号灯第1次,和第K次肯定是拉下了,其余的只会被第K的因子次拉,
据因式分解定理,数K分解为
K=p1^(n1)*p2^(n2)*.....pi^(ni)
其中p1,p2,...pi为素数。
那么,K有那些因子呢?
其实可以考虑任一个因子,他可能是从n1个p1中选若干个(0个到n1个),从n2个p2中选若干个。。。。。(当全是0个的时候,这个特殊的因子是1)
这样,根据乘法原理,总共有L(K)=(n1+1)*(n2+1)*(n3+1).....
比如,12=2^2*3
一种有3*2=6个因子,他们是1,2,3,4,6,12.

现在考虑要使L(K)为奇数,那么n1,n2,n3不能有一个是奇数,或则,有一个ni+1为偶数,而偶数与任何数相乘仍为偶数。
从而,n1,n2,n3都为偶数,都能被2除。
因为n1,n2,n3都为偶数,显然该数必须是个平方数,可写成K=(X)^2.
从而,1,4,9,16,25,36,49,64,81,100最后是亮的。

posted on 2008-03-05 15:00 DoubleH 阅读(2103) 评论(7)  编辑  收藏 所属分类: Memorandum

Feedback

# re: 有意思的“电灯泡问题” 2008-03-07 10:51 别问
真无聊,还不如出去转转  回复  更多评论
  

# re: 有意思的“电灯泡问题” 2008-03-07 10:54 vole
good analysis!!!  回复  更多评论
  

# re: 有意思的“电灯泡问题” 2008-03-07 12:04 长大不回家
我觉得应该这样,for i from 2 to 100;不代表这些灯泡标号,for j=2 to i,if(i%j==0)k++;如果最后k为偶数则灯的开的  回复  更多评论
  

# re: 有意思的“电灯泡问题”[未登录] 2008-03-08 22:05 Ryan
简单问题复杂化了,灯还亮的说明拉了奇数次,只要考察一下什么数有奇数个因数就可以了!  回复  更多评论
  

# re: 有意思的“电灯泡问题” 2008-03-09 11:58 ZelluX
小学“趣味数学”常见题。。。  回复  更多评论
  

# re: 有意思的“电灯泡问题” 2009-08-13 22:36 嘎嘎
@Ryan
正解  回复  更多评论
  

# re: 有意思的“电灯泡问题”[未登录] 2009-10-24 17:26 张云
import java.util.ArrayList;
import java.util.List;


public class Lamp {
private boolean isOn = false;
int id;
static int count = 0;
public Lamp(int id) {
this.id = id;
}
private static List<Lamp> lamps = new ArrayList<Lamp>();



public static void main(String args[]) {
for(int i=0; i<100; i++) {
Lamp lamp = new Lamp(i);
lamps.add(lamp);
}

for(int i=0; i<100; i++) {
for(int j=1; j<=100; j++) {
if((i+1)%j == 0) {
lamps.get(i).change();
}
}
}

for(int i=0; i<100; i++) {
System.out.println(lamps.get(i));
}

for(int i=0; i<100; i++) {
if(lamps.get(i).isOn == true) {
count ++;
}
}
System.out.println("there are "+ count + " is on");
}

public void change() {
if(isOn == false) {
isOn = true;
}
else {
isOn =false;
}
}

public String toString() {
return this.id + ":" + this.isOn;
}
}



---------------------------------------------
0:true
1:false
2:false
3:true
4:false
5:false
6:false
7:false
8:true
9:false
10:false
11:false
12:false
13:false
14:false
15:true
16:false
17:false
18:false
19:false
20:false
21:false
22:false
23:false
24:true
25:false
26:false
27:false
28:false
29:false
30:false
31:false
32:false
33:false
34:false
35:true
36:false
37:false
38:false
39:false
40:false
41:false
42:false
43:false
44:false
45:false
46:false
47:false
48:true
49:false
50:false
51:false
52:false
53:false
54:false
55:false
56:false
57:false
58:false
59:false
60:false
61:false
62:false
63:true
64:false
65:false
66:false
67:false
68:false
69:false
70:false
71:false
72:false
73:false
74:false
75:false
76:false
77:false
78:false
79:false
80:true
81:false
82:false
83:false
84:false
85:false
86:false
87:false
88:false
89:false
90:false
91:false
92:false
93:false
94:false
95:false
96:false
97:false
98:false
99:true
there are 10 is on
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: