teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

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

2017/06/25 03:06

投稿

think49
think49

スコア18194

answer CHANGED
@@ -27,7 +27,7 @@
27
27
  6 * (1 + 2 + 3);
28
28
  ```
29
29
 
30
- 1からNまでの自然数の和は「`(N * (N + 1)) / 2`」で求められる事を利用します。
30
+ 1からNまでの自然数の和は「`N * (N + 1) / 2`」で求められる事を利用します。
31
31
 
32
32
  ```JavaScript
33
33
  var number = Math.floor(100/6);

4

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

2017/06/25 03:06

投稿

think49
think49

スコア18194

answer CHANGED
@@ -27,7 +27,7 @@
27
27
  6 * (1 + 2 + 3);
28
28
  ```
29
29
 
30
- 1からNまでの自然数の和は「`(N * N + 1) / 2`」で求められる事を利用します。
30
+ 1からNまでの自然数の和は「`(N * (N + 1)) / 2`」で求められる事を利用します。
31
31
 
32
32
  ```JavaScript
33
33
  var number = Math.floor(100/6);

3

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

2017/06/25 03:04

投稿

think49
think49

スコア18194

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  console.log(result); // 816
17
17
  ```
18
18
 
19
- ### 自然数の和 (最速)
19
+ ### 自然数の和 (本回答の中で最速)
20
20
 
21
21
  while文を発展させたコード。
22
22
  6の倍数の総和も6の倍数です。

2

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

2017/06/25 03:02

投稿

think49
think49

スコア18194

answer CHANGED
@@ -2,22 +2,43 @@
2
2
 
3
3
  ### while 文
4
4
 
5
- いきな要件を無視てますが、おそらくこれが最速と。
5
+ 処理で最速と思われるwhile文
6
+ このコードを発展させる事である「数式」が浮かび上がります。
6
7
 
7
8
  ```JavaScript
8
9
  'use strict';
9
- var i = 0, iMax = Math.floor(100/6) + 1, result = 0;
10
+ var i = 1, iMax = Math.floor(100/6) + 1, result = 0;
10
11
 
11
- while (++i < iMax) {
12
+ while (i < iMax) {
12
- result += 6 * i;
13
+ result += 6 * i++;
13
14
  }
14
15
 
15
16
  console.log(result); // 816
16
17
  ```
17
18
 
19
+ ### 自然数の和 (最速)
20
+
21
+ while文を発展させたコード。
22
+ 6の倍数の総和も6の倍数です。
23
+ では、乗数に注目してみると「自然数の和」である事が分かります(下記2行のコードは等価です)。
24
+
25
+ ```JavaScript
26
+ 6 * 1 + 6 * 2 + 6 * 3;
27
+ 6 * (1 + 2 + 3);
28
+ ```
29
+
30
+ 1からNまでの自然数の和は「`(N * N + 1) / 2`」で求められる事を利用します。
31
+
32
+ ```JavaScript
33
+ var number = Math.floor(100/6);
34
+ number = 6 * number * (number + 1) / 2;
35
+
36
+ console.log(number); // 816
37
+ ```
38
+
18
39
  ### for 文
19
40
 
20
- 最適化された while 文があるなら for 文も楽勝ですよね。
41
+ while 文があるなら for 文も楽勝ですよね。
21
42
  あれ?if文がない…。
22
43
 
23
44
  ```JavaScript
@@ -50,4 +71,8 @@
50
71
 
51
72
  「せんせー。if文を使ったコードは冗長で筋が悪いと思います!」
52
73
 
74
+ ### 更新履歴
75
+
76
+ - 2017/06/25 11:59 「自然数の和」を利用したコードを追記。私が思いつく中では最速。
77
+
53
- Re: ojii-111 さん
78
+ Re: ojii-111 さん

1

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

2017/06/25 02:59

投稿

think49
think49

スコア18194

answer CHANGED
@@ -39,7 +39,7 @@
39
39
  'use strict';
40
40
  var result = 0;
41
41
 
42
- for (var i = 1; i < 100; ++i) {
42
+ for (var i = 1; i < 101; ++i) {
43
43
  if (i % 6 === 0) {
44
44
  result += i;
45
45
  }