回答編集履歴

5

N \* \(N \+ 1\) / 2

2017/06/25 03:06

投稿

think49
think49

スコア18166

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
- 1からNまでの自然数の和は「`(N * (N + 1)) / 2`」で求められる事を利用します。
59
+ 1からNまでの自然数の和は「`N * (N + 1) / 2`」で求められる事を利用します。
60
60
 
61
61
 
62
62
 

4

\(N \* \(N \+ 1\)\) / 2

2017/06/25 03:06

投稿

think49
think49

スコア18166

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
- 1からNまでの自然数の和は「`(N * N + 1) / 2`」で求められる事を利用します。
59
+ 1からNまでの自然数の和は「`(N * (N + 1)) / 2`」で求められる事を利用します。
60
60
 
61
61
 
62
62
 

3

最速 -> 本回答の中で最速

2017/06/25 03:04

投稿

think49
think49

スコア18166

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- ### 自然数の和 (最速)
37
+ ### 自然数の和 (本回答の中で最速)
38
38
 
39
39
 
40
40
 

2

while 文のインクリメント処理の最適化\(インクリメント回数を

2017/06/25 03:02

投稿

think49
think49

スコア18166

test CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
 
8
8
 
9
- いきな要件を無視てますが、おそらくこれが最速と。
9
+ 処理で最速と思われるwhile文
10
+
11
+ このコードを発展させる事である「数式」が浮かび上がります。
10
12
 
11
13
 
12
14
 
@@ -14,13 +16,13 @@
14
16
 
15
17
  'use strict';
16
18
 
17
- var i = 0, iMax = Math.floor(100/6) + 1, result = 0;
19
+ var i = 1, iMax = Math.floor(100/6) + 1, result = 0;
18
20
 
19
21
 
20
22
 
21
- while (++i < iMax) {
23
+ while (i < iMax) {
22
24
 
23
- result += 6 * i;
25
+ result += 6 * i++;
24
26
 
25
27
  }
26
28
 
@@ -32,11 +34,51 @@
32
34
 
33
35
 
34
36
 
37
+ ### 自然数の和 (最速)
38
+
39
+
40
+
41
+ while文を発展させたコード。
42
+
43
+ 6の倍数の総和も6の倍数です。
44
+
45
+ では、乗数に注目してみると「自然数の和」である事が分かります(下記2行のコードは等価です)。
46
+
47
+
48
+
49
+ ```JavaScript
50
+
51
+ 6 * 1 + 6 * 2 + 6 * 3;
52
+
53
+ 6 * (1 + 2 + 3);
54
+
55
+ ```
56
+
57
+
58
+
59
+ 1からNまでの自然数の和は「`(N * N + 1) / 2`」で求められる事を利用します。
60
+
61
+
62
+
63
+ ```JavaScript
64
+
65
+ var number = Math.floor(100/6);
66
+
67
+ number = 6 * number * (number + 1) / 2;
68
+
69
+
70
+
71
+ console.log(number); // 816
72
+
73
+ ```
74
+
75
+
76
+
35
77
  ### for 文
36
78
 
37
79
 
38
80
 
39
- 最適化された while 文があるなら for 文も楽勝ですよね。
81
+ while 文があるなら for 文も楽勝ですよね。
40
82
 
41
83
  あれ?if文がない…。
42
84
 
@@ -102,4 +144,14 @@
102
144
 
103
145
 
104
146
 
147
+ ### 更新履歴
148
+
149
+
150
+
151
+ - 2017/06/25 11:59 「自然数の和」を利用したコードを追記。私が思いつく中では最速。
152
+
153
+
154
+
105
155
  Re: ojii-111 さん
156
+
157
+

1

「for \+ if 文 \(非最適化版\)」で 100 が加算可能な値に含まれていなかった不具合を修正

2017/06/25 02:59

投稿

think49
think49

スコア18166

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
 
82
82
 
83
- for (var i = 1; i < 100; ++i) {
83
+ for (var i = 1; i < 101; ++i) {
84
84
 
85
85
  if (i % 6 === 0) {
86
86