回答編集履歴

3

修正

2019/02/14 08:57

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  IsPrimeNumberは引数numの値が3以下のときは早期にtrueを返してるので、
54
54
 
55
- ループの条件として num <= n / 2 を用いても問題は無いです。非効率的なだけで。
55
+ ループの条件として i <= num / 2 を用いても問題は無いです。非効率的なだけで。
56
56
 
57
57
 
58
58
 

2

追記

2019/02/14 08:57

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -31,3 +31,31 @@
31
31
  このように除数が途中で折り返すので、半分だけチェックすれば良いことが分かります。
32
32
 
33
33
  ただし『真ん中の数』は n/2 ではなく √n なので、条件は <= Math.sqrt(num) で充分です。
34
+
35
+
36
+
37
+ i <= num / 2 は誤り?
38
+
39
+ ---
40
+
41
+ - f(x) := x/2 も g(x) := √x も単調増加する関数である
42
+
43
+ - x = 0, 4 のとき f(x) = g(x) である
44
+
45
+ - f'(x) = 1/2, g'(x) = 1/(2√x) より、 x >= 1 のとき f'(x) >= g'(x)
46
+
47
+
48
+
49
+ よって x >= 4 ならば f(x) >= g(x) である。
50
+
51
+
52
+
53
+ IsPrimeNumberは引数numの値が3以下のときは早期にtrueを返してるので、
54
+
55
+ ループの条件として num <= n / 2 を用いても問題は無いです。非効率的なだけで。
56
+
57
+
58
+
59
+ ---
60
+
61
+ 論理に穴がある気がしてしょうがない。数学難しい。

1

修正

2019/02/14 08:54

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -30,4 +30,4 @@
30
30
 
31
31
  このように除数が途中で折り返すので、半分だけチェックすれば良いことが分かります。
32
32
 
33
- ただし『真ん中の数』は n/2 ではなく √n なので、条件は <= Math.sqrt(num - 2) で充分です。
33
+ ただし『真ん中の数』は n/2 ではなく √n なので、条件は <= Math.sqrt(num) で充分です。