問題: 有100盞燈,分別寫上編號1~100,同樣地 有100個開關,寫上編號1~100。當我按1號開關,寫上1的倍數的燈會開/關(如果燈開着就關,相反地,關着就會開),當我按2號開關,寫上2的倍數的燈會開/關,如此類推。
問:如果一開始所有燈都亮着,當我每個開關都按一下之后,會有幾多盞燈會開着? 他們的編號又是什么?
首先的個人想法:
- 根據編號能否被整除來確定是否按一次對應編號的燈,是相對獨立的,意味着先按后按都沒有關系,只要遍歷所有操作就可以。
- 那么反過來推想,能被100整除的數,只有100,所以100會被按一次,100熄滅,然后99只能被99整除,故99熄滅···
- 以上類推,那么每個燈都會滅掉。所以亮着的燈是0盞。
總結分析:100的並不是只能被100整除,他還可以被2,4,5,20,25··等數字整除,意味着100號等不止被操作一遍,所以結果不正確。
再根據數學邏輯分析:
- 顯然,燈如果一開始就亮着,那么當它被操作偶數次的時候,它仍舊會亮着,當他被操作奇數次的時候,它會是熄滅的。
- 這樣一來,問題就是變成了每個編號的數字,在1~100里面有多少個約數。
- 一開始嘗試使用數學的方法找公因數,公倍數什么的簡單解決,沒有頭緒,只好使用暴力破解,上代碼,跑出結果來。
public void light(){
HashMap<Integer,String> hashMap = new HashMap<>();
//初始化狀態為亮的
for(int i=1;i<=100;i++){
hashMap.put(i,"亮");
}
//遍歷所有操作,並記錄輸出過程
for(int i=1;i<=100;i++){
System.out.println("_____________num:"+i+"__________________");
for (int j=1;j<=100;j++) {
if(j%i==0){
if (hashMap.get(j).equals("亮")) {
hashMap.put(j,"暗");
System.out.println(j+"set :"+hashMap.get(j));
continue;
}
if (hashMap.get(j).equals("暗")){
hashMap.put(j,"亮");
System.out.println(j+"set :"+hashMap.get(j));
}
}
}
}
//輸出最后結果
for (int i=1;i<=100;i++){
System.out.println(i+"__"+hashMap.get(i));
}
}
_____________num:1__________________
1set :暗
2set :暗
3set :暗
4set :暗
5set :暗
6set :暗
7set :暗
8set :暗
9set :暗
10set :暗
11set :暗
12set :暗
13set :暗
14set :暗
15set :暗
16set :暗
17set :暗
18set :暗
19set :暗
20set :暗
21set :暗
22set :暗
23set :暗
24set :暗
25set :暗
26set :暗
27set :暗
28set :暗
29set :暗
30set :暗
31set :暗
32set :暗
33set :暗
34set :暗
35set :暗
36set :暗
37set :暗
38set :暗
39set :暗
40set :暗
41set :暗
42set :暗
43set :暗
44set :暗
45set :暗
46set :暗
47set :暗
48set :暗
49set :暗
50set :暗
51set :暗
52set :暗
53set :暗
54set :暗
55set :暗
56set :暗
57set :暗
58set :暗
59set :暗
60set :暗
61set :暗
62set :暗
63set :暗
64set :暗
65set :暗
66set :暗
67set :暗
68set :暗
69set :暗
70set :暗
71set :暗
72set :暗
73set :暗
74set :暗
75set :暗
76set :暗
77set :暗
78set :暗
79set :暗
80set :暗
81set :暗
82set :暗
83set :暗
84set :暗
85set :暗
86set :暗
87set :暗
88set :暗
89set :暗
90set :暗
91set :暗
92set :暗
93set :暗
94set :暗
95set :暗
96set :暗
97set :暗
98set :暗
99set :暗
100set :暗
_____________num:2__________________
2set :亮
4set :亮
6set :亮
8set :亮
10set :亮
12set :亮
14set :亮
16set :亮
18set :亮
20set :亮
22set :亮
24set :亮
26set :亮
28set :亮
30set :亮
32set :亮
34set :亮
36set :亮
38set :亮
40set :亮
42set :亮
44set :亮
46set :亮
48set :亮
50set :亮
52set :亮
54set :亮
56set :亮
58set :亮
60set :亮
62set :亮
64set :亮
66set :亮
68set :亮
70set :亮
72set :亮
74set :亮
76set :亮
78set :亮
80set :亮
82set :亮
84set :亮
86set :亮
88set :亮
90set :亮
92set :亮
94set :亮
96set :亮
98set :亮
100set :亮
_____________num:3__________________
3set :亮
6set :暗
9set :亮
12set :暗
15set :亮
18set :暗
21set :亮
24set :暗
27set :亮
30set :暗
33set :亮
36set :暗
39set :亮
42set :暗
45set :亮
48set :暗
51set :亮
54set :暗
57set :亮
60set :暗
63set :亮
66set :暗
69set :亮
72set :暗
75set :亮
78set :暗
81set :亮
84set :暗
87set :亮
90set :暗
93set :亮
96set :暗
99set :亮
_____________num:4__________________
4set :暗
8set :暗
12set :亮
16set :暗
20set :暗
24set :亮
28set :暗
32set :暗
36set :亮
40set :暗
44set :暗
48set :亮
52set :暗
56set :暗
60set :亮
64set :暗
68set :暗
72set :亮
76set :暗
80set :暗
84set :亮
88set :暗
92set :暗
96set :亮
100set :暗
_____________num:5__________________
5set :亮
10set :暗
15set :暗
20set :亮
25set :亮
30set :亮
35set :亮
40set :亮
45set :暗
50set :暗
55set :亮
60set :暗
65set :亮
70set :暗
75set :暗
80set :亮
85set :亮
90set :亮
95set :亮
100set :亮
_____________num:6__________________
6set :亮
12set :暗
18set :亮
24set :暗
30set :暗
36set :暗
42set :亮
48set :暗
54set :亮
60set :亮
66set :亮
72set :暗
78set :亮
84set :暗
90set :暗
96set :暗
_____________num:7__________________
7set :亮
14set :暗
21set :暗
28set :亮
35set :暗
42set :暗
49set :亮
56set :亮
63set :暗
70set :亮
77set :亮
84set :亮
91set :亮
98set :暗
_____________num:8__________________
8set :亮
16set :亮
24set :亮
32set :亮
40set :暗
48set :亮
56set :暗
64set :亮
72set :亮
80set :暗
88set :亮
96set :亮
_____________num:9__________________
9set :暗
18set :暗
27set :暗
36set :亮
45set :亮
54set :暗
63set :亮
72set :暗
81set :暗
90set :亮
99set :暗
_____________num:10__________________
10set :亮
20set :暗
30set :亮
40set :亮
50set :亮
60set :暗
70set :暗
80set :亮
90set :暗
100set :暗
_____________num:11__________________
11set :亮
22set :暗
33set :暗
44set :亮
55set :暗
66set :暗
77set :暗
88set :暗
99set :亮
_____________num:12__________________
12set :亮
24set :暗
36set :暗
48set :暗
60set :亮
72set :亮
84set :暗
96set :暗
_____________num:13__________________
13set :亮
26set :暗
39set :暗
52set :亮
65set :暗
78set :暗
91set :暗
_____________num:14__________________
14set :亮
28set :暗
42set :亮
56set :亮
70set :亮
84set :亮
98set :亮
_____________num:15__________________
15set :亮
30set :暗
45set :暗
60set :暗
75set :亮
90set :亮
_____________num:16__________________
16set :暗
32set :暗
48set :亮
64set :暗
80set :暗
96set :亮
_____________num:17__________________
17set :亮
34set :暗
51set :暗
68set :亮
85set :暗
_____________num:18__________________
18set :亮
36set :亮
54set :亮
72set :暗
90set :暗
_____________num:19__________________
19set :亮
38set :暗
57set :暗
76set :亮
95set :暗
_____________num:20__________________
20set :亮
40set :暗
60set :亮
80set :亮
100set :亮
_____________num:21__________________
21set :亮
42set :暗
63set :暗
84set :暗
_____________num:22__________________
22set :亮
44set :暗
66set :亮
88set :亮
_____________num:23__________________
23set :亮
46set :暗
69set :暗
92set :亮
_____________num:24__________________
24set :亮
48set :暗
72set :亮
96set :暗
_____________num:25__________________
25set :暗
50set :暗
75set :暗
100set :暗
_____________num:26__________________
26set :亮
52set :暗
78set :亮
_____________num:27__________________
27set :亮
54set :暗
81set :亮
_____________num:28__________________
28set :亮
56set :暗
84set :亮
_____________num:29__________________
29set :亮
58set :暗
87set :暗
_____________num:30__________________
30set :亮
60set :暗
90set :亮
_____________num:31__________________
31set :亮
62set :暗
93set :暗
_____________num:32__________________
32set :亮
64set :亮
96set :亮
_____________num:33__________________
33set :亮
66set :暗
99set :暗
_____________num:34__________________
34set :亮
68set :暗
_____________num:35__________________
35set :亮
70set :暗
_____________num:36__________________
36set :暗
72set :暗
_____________num:37__________________
37set :亮
74set :暗
_____________num:38__________________
38set :亮
76set :暗
_____________num:39__________________
39set :亮
78set :暗
_____________num:40__________________
40set :亮
80set :暗
_____________num:41__________________
41set :亮
82set :暗
_____________num:42__________________
42set :亮
84set :暗
_____________num:43__________________
43set :亮
86set :暗
_____________num:44__________________
44set :亮
88set :暗
_____________num:45__________________
45set :亮
90set :暗
_____________num:46__________________
46set :亮
92set :暗
_____________num:47__________________
47set :亮
94set :暗
_____________num:48__________________
48set :亮
96set :暗
_____________num:49__________________
49set :暗
98set :暗
_____________num:50__________________
50set :亮
100set :亮
_____________num:51__________________
51set :亮
_____________num:52__________________
52set :亮
_____________num:53__________________
53set :亮
_____________num:54__________________
54set :亮
_____________num:55__________________
55set :亮
_____________num:56__________________
56set :亮
_____________num:57__________________
57set :亮
_____________num:58__________________
58set :亮
_____________num:59__________________
59set :亮
_____________num:60__________________
60set :亮
_____________num:61__________________
61set :亮
_____________num:62__________________
62set :亮
_____________num:63__________________
63set :亮
_____________num:64__________________
64set :暗
_____________num:65__________________
65set :亮
_____________num:66__________________
66set :亮
_____________num:67__________________
67set :亮
_____________num:68__________________
68set :亮
_____________num:69__________________
69set :亮
_____________num:70__________________
70set :亮
_____________num:71__________________
71set :亮
_____________num:72__________________
72set :亮
_____________num:73__________________
73set :亮
_____________num:74__________________
74set :亮
_____________num:75__________________
75set :亮
_____________num:76__________________
76set :亮
_____________num:77__________________
77set :亮
_____________num:78__________________
78set :亮
_____________num:79__________________
79set :亮
_____________num:80__________________
80set :亮
_____________num:81__________________
81set :暗
_____________num:82__________________
82set :亮
_____________num:83__________________
83set :亮
_____________num:84__________________
84set :亮
_____________num:85__________________
85set :亮
_____________num:86__________________
86set :亮
_____________num:87__________________
87set :亮
_____________num:88__________________
88set :亮
_____________num:89__________________
89set :亮
_____________num:90__________________
90set :亮
_____________num:91__________________
91set :亮
_____________num:92__________________
92set :亮
_____________num:93__________________
93set :亮
_____________num:94__________________
94set :亮
_____________num:95__________________
95set :亮
_____________num:96__________________
96set :亮
_____________num:97__________________
97set :亮
_____________num:98__________________
98set :亮
_____________num:99__________________
99set :亮
_____________num:100__________________
100set :暗
1__暗
2__亮
3__亮
4__暗
5__亮
6__亮
7__亮
8__亮
9__暗
10__亮
11__亮
12__亮
13__亮
14__亮
15__亮
16__暗
17__亮
18__亮
19__亮
20__亮
21__亮
22__亮
23__亮
24__亮
25__暗
26__亮
27__亮
28__亮
29__亮
30__亮
31__亮
32__亮
33__亮
34__亮
35__亮
36__暗
37__亮
38__亮
39__亮
40__亮
41__亮
42__亮
43__亮
44__亮
45__亮
46__亮
47__亮
48__亮
49__暗
50__亮
51__亮
52__亮
53__亮
54__亮
55__亮
56__亮
57__亮
58__亮
59__亮
60__亮
61__亮
62__亮
63__亮
64__暗
65__亮
66__亮
67__亮
68__亮
69__亮
70__亮
71__亮
72__亮
73__亮
74__亮
75__亮
76__亮
77__亮
78__亮
79__亮
80__亮
81__暗
82__亮
83__亮
84__亮
85__亮
86__亮
87__亮
88__亮
89__亮
90__亮
91__亮
92__亮
93__亮
94__亮
95__亮
96__亮
97__亮
98__亮
99__亮
100__暗
跑出來的結果是,1,4,9,25,36,49,64,81,100是暗的。那么它們必定被操作了奇數次。
稍微觀察一下,也能看到這些數字有一個很顯然的特點:都是完全平方數。
為什么會這樣呢?
- 回到原來,每個編號的燈被操作的次數,等於它在1~100中擁有的因數個數。
- 那么就會得出一個結論,完全平方數有奇數個約數。
//為什么完全平方數有奇數個約數?
以100為例:
1×100=100
2*50=100
4*25=100
5*20=100
10*10=100
/*
100的所有約數如上所示,
顯然在10×10=100之前,兩個乘數都是100的約數,是偶數個
,但10只能算一個,所以完全平方數必定有奇數個約數,
對應的,非完全平方數一定有偶數個約數。
*/
數學結論:
完全平方數必定有奇數個約數,
非完全平方數一定有偶數個約數。