回答編集履歴
15
fix
test
CHANGED
@@ -37,7 +37,7 @@
|
|
37
37
|
|
38
38
|
|
39
39
|
たとえば15が素数かどうか調べたいとして
|
40
|
-
上のコードではforループでi=2~14まで
|
40
|
+
上のコードではforループでi=2~14まで1ずつ増やしていって、割り切れるかどうかを調べることになる。
|
41
41
|
i=3の場合、15÷3=5 余り ゼロなので、value % i ===0となって、primeにfalseが設定されてbreakされる。(素数ではない)
|
42
42
|
|
43
43
|
でも17が素数かどうかを調べたい場合、上のコードはi=16までループしてやっと「17は素数」という正しい答えを出してくれるが
|
14
fix
test
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
こたえ:
|
2
|
+
ループの回数を減らすため。
|
2
|
-
ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを調べればいい
|
3
|
+
(ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを調べればいいから)
|
3
4
|
|
4
5
|
たとえばこの問題は次のようなプログラムでもとける。
|
5
6
|
|
13
FIX
test
CHANGED
@@ -36,13 +36,13 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
たとえば15が素数かどうか調べたいとして
|
39
|
-
forループでi=2~14までの数で割り切れるかどうかを調べると
|
39
|
+
上のコードではforループでi=2~14までの各整数で割り切れるかどうかを調べることになる。
|
40
|
-
i=3の場合、15÷3=5なので、breakされ
|
40
|
+
i=3の場合、15÷3=5 余り ゼロなので、value % i ===0となって、primeにfalseが設定されてbreakされる。(素数ではない)
|
41
41
|
|
42
|
-
でも17が素数かどうかを調べたい場合、上のコードはi=16までループしてやっと「17は素数」という正しい答えを出してくれる
|
42
|
+
でも17が素数かどうかを調べたい場合、上のコードはi=16までループしてやっと「17は素数」という正しい答えを出してくれるが
|
43
43
|
17の平方根は4.123…なので、実際には2~4まで調べればいい。
|
44
44
|
4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
|
45
|
-
(4まで調べて割り切る数がなければ、5以上の数で割り切れないことは自明)
|
45
|
+
(4まで調べて割り切る数がなければ、5以上の整数で割り切れないことは自明)
|
46
46
|
|
47
47
|
-----------
|
48
48
|
「何も出力されませんでした。」の理由は
|
12
fix
test
CHANGED
@@ -39,7 +39,7 @@
|
|
39
39
|
forループでi=2~14までの数で割り切れるかどうかを調べるとする。
|
40
40
|
i=3の場合、15÷3=5なので、breakされて割り切る数がある=素数ではない、ということがわかる。
|
41
41
|
|
42
|
-
でも17が素数かどうかを調べたい場合、上のコードはi=16までループしてし
|
42
|
+
でも17が素数かどうかを調べたい場合、上のコードはi=16までループしてやっと「17は素数」という正しい答えを出してくれる。
|
43
43
|
17の平方根は4.123…なので、実際には2~4まで調べればいい。
|
44
44
|
4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
|
45
45
|
(4まで調べて割り切る数がなければ、5以上の数で割り切れないことは自明)
|
11
fix
test
CHANGED
@@ -51,6 +51,6 @@
|
|
51
51
|
を
|
52
52
|
for (let i = 2; i <= value; i++) {
|
53
53
|
にしたんだろう。
|
54
|
-
このばあいiがvalueに等しいとき必ず割り切れるので、
|
54
|
+
このばあい、valueが素数であったとしても、iがvalueに等しいとき必ず割り切れるので、合成数であると誤判定される
|
55
55
|
|
56
56
|
|
10
add
test
CHANGED
@@ -44,6 +44,13 @@
|
|
44
44
|
4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
|
45
45
|
(4まで調べて割り切る数がなければ、5以上の数で割り切れないことは自明)
|
46
46
|
|
47
|
+
-----------
|
48
|
+
「何も出力されませんでした。」の理由は
|
49
|
+
たぶん
|
50
|
+
for (let i = 2; i < value; i++) {
|
51
|
+
を
|
52
|
+
for (let i = 2; i <= value; i++) {
|
53
|
+
にしたんだろう。
|
54
|
+
このばあいiがvalueに等しいとき必ず割り切れるので、素数も合成数だと誤判定される
|
47
55
|
|
48
56
|
|
49
|
-
|
9
fix
test
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
こたえ:
|
2
|
-
ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを
|
2
|
+
ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを調べればいい、から。
|
3
3
|
|
4
4
|
たとえばこの問題は次のようなプログラムでもとける。
|
5
|
+
|
6
|
+
(for(let i=2; i <= Math.floor(Math.sqrt(value)); i++) {
|
7
|
+
を
|
8
|
+
for (let i = 2; i < value; i++) {
|
9
|
+
に変えただけ)
|
10
|
+
|
5
11
|
```
|
6
12
|
function* genPrimes() {
|
7
13
|
let num = 2; //素数の開始値
|
8
fix
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
こたえ:
|
2
2
|
ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを比較すればよい、から。
|
3
3
|
|
4
|
-
たとえば次のようなプログラム
|
4
|
+
たとえばこの問題は次のようなプログラムでもとける。
|
5
5
|
```
|
6
6
|
function* genPrimes() {
|
7
7
|
let num = 2; //素数の開始値
|
7
fix
test
CHANGED
@@ -31,11 +31,12 @@
|
|
31
31
|
|
32
32
|
たとえば15が素数かどうか調べたいとして
|
33
33
|
forループでi=2~14までの数で割り切れるかどうかを調べるとする。
|
34
|
-
i=3の場合、15÷3=5なので、割り切る数がある=素数ではない、ということがわかる。
|
34
|
+
i=3の場合、15÷3=5なので、breakされて割り切る数がある=素数ではない、ということがわかる。
|
35
35
|
|
36
|
-
でも17が素数かどうかを調べたい場合、上のコードは
|
36
|
+
でも17が素数かどうかを調べたい場合、上のコードはi=16までループしてしまう。
|
37
|
-
|
37
|
+
17の平方根は4.123…なので、実際には2~4まで調べればいい。
|
38
|
-
|
38
|
+
4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
|
39
|
+
(4まで調べて割り切る数がなければ、5以上の数で割り切れないことは自明)
|
39
40
|
|
40
41
|
|
41
42
|
|
6
fix
test
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
こたえ:
|
2
|
-
ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを比較すればよい、
|
2
|
+
ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを比較すればよい、から。
|
3
3
|
|
4
|
-
|
5
|
-
たとえば15が素数かどうか調べたいとして
|
6
|
-
forループでi=2~14までの数で割り切れるかどうかを調べるとする。
|
7
|
-
i=3の場合、15÷3=5なので、割り切る数がある=素数ではない、ということがわかる。
|
8
|
-
|
9
|
-
「このプログラムでは割り切れる数が見つかった時点でbreakしてるから、
|
10
|
-
無駄に処理することはない。だからわざわざforの上限値を平方根計算でもとめる必要はないんでは?」」という主張をするのは、まあ妥当かもしれない。
|
11
|
-
|
12
|
-
|
4
|
+
たとえば次のようなプログラムだとする。
|
13
5
|
```
|
14
6
|
function* genPrimes() {
|
15
7
|
let num = 2; //素数の開始値
|
@@ -36,12 +28,14 @@
|
|
36
28
|
}
|
37
29
|
```
|
38
30
|
|
39
|
-
でも「仮に」breakしない場合、iは14までループする。
|
40
|
-
i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、
|
41
|
-
すでにi=3の場合に調べているので、無駄な処理になる。
|
42
31
|
|
32
|
+
たとえば15が素数かどうか調べたいとして
|
33
|
+
forループでi=2~14までの数で割り切れるかどうかを調べるとする。
|
43
|
-
|
34
|
+
i=3の場合、15÷3=5なので、割り切る数がある=素数ではない、ということがわかる。
|
35
|
+
|
44
|
-
|
36
|
+
でも17が素数かどうかを調べたい場合、上のコードはは16までループしてしまう。
|
37
|
+
|
38
|
+
17の平方根は4.なにがしなので、実際には2~4まで調べればよい。4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
|
45
39
|
|
46
40
|
|
47
41
|
|
5
add
test
CHANGED
@@ -9,6 +9,33 @@
|
|
9
9
|
「このプログラムでは割り切れる数が見つかった時点でbreakしてるから、
|
10
10
|
無駄に処理することはない。だからわざわざforの上限値を平方根計算でもとめる必要はないんでは?」」という主張をするのは、まあ妥当かもしれない。
|
11
11
|
|
12
|
+
つまり次のようなプログラム。
|
13
|
+
```
|
14
|
+
function* genPrimes() {
|
15
|
+
let num = 2; //素数の開始値
|
16
|
+
while (true) {
|
17
|
+
if (isPrime(num)) { yield num; }
|
18
|
+
num++;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
function isPrime(value) {
|
23
|
+
let prime = true;
|
24
|
+
for (let i = 2; i < value; i++) {
|
25
|
+
if (value % i === 0) {
|
26
|
+
prime = false;
|
27
|
+
break;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
return prime;
|
31
|
+
}
|
32
|
+
|
33
|
+
for (let value of genPrimes()) {
|
34
|
+
if (value > 100) { break; }
|
35
|
+
console.log(value);
|
36
|
+
}
|
37
|
+
```
|
38
|
+
|
12
39
|
でも「仮に」breakしない場合、iは14までループする。
|
13
40
|
i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、
|
14
41
|
すでにi=3の場合に調べているので、無駄な処理になる。
|
4
fix
test
CHANGED
@@ -13,8 +13,8 @@
|
|
13
13
|
i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、
|
14
14
|
すでにi=3の場合に調べているので、無駄な処理になる。
|
15
15
|
|
16
|
-
もしかしたら何かの拍子で、他の処理をループに組み込んでB
|
16
|
+
もしかしたら何かの拍子で、他の処理をループに組み込んでBreakしないようにするかもしれない。
|
17
|
-
そうなったら、平方根まで
|
17
|
+
そうなったら、forの上限値を平方根までとする、とするコードが意味を持つかもしれない。
|
18
18
|
|
19
19
|
|
20
20
|
|
3
FIX
test
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
forループでi=2~14までの数で割り切れるかどうかを調べるとする。
|
7
7
|
i=3の場合、15÷3=5なので、割り切る数がある=素数ではない、ということがわかる。
|
8
8
|
|
9
|
-
「このプログラムでは
|
9
|
+
「このプログラムでは割り切れる数が見つかった時点でbreakしてるから、
|
10
|
-
わざわざ平方根で
|
10
|
+
無駄に処理することはない。だからわざわざforの上限値を平方根計算でもとめる必要はないんでは?」」という主張をするのは、まあ妥当かもしれない。
|
11
11
|
|
12
12
|
でも「仮に」breakしない場合、iは14までループする。
|
13
13
|
i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、
|
2
fix
test
CHANGED
@@ -3,13 +3,13 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
たとえば15が素数かどうか調べたいとして
|
6
|
-
forループでi=2~1
|
6
|
+
forループでi=2~14までの数で割り切れるかどうかを調べるとする。
|
7
7
|
i=3の場合、15÷3=5なので、割り切る数がある=素数ではない、ということがわかる。
|
8
8
|
|
9
9
|
「このプログラムではその時点でbreakしてるから、
|
10
10
|
わざわざ平方根で変換する必要はないのでは?」と考えてその主張をするのは、まあ妥当かもしれない。
|
11
11
|
|
12
|
-
でも「仮に」breakしない場合、iは1
|
12
|
+
でも「仮に」breakしない場合、iは14までループする。
|
13
13
|
i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、
|
14
14
|
すでにi=3の場合に調べているので、無駄な処理になる。
|
15
15
|
|
1
test
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
こたえ:
|
2
|
-
ある数が素数かどうか調べたい場合は、その数の平方根までの数を比較すればよい、ということをプログラム上で表現しているから。
|
2
|
+
ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを比較すればよい、ということをプログラム上で表現しているから。
|
3
3
|
|
4
4
|
|
5
5
|
たとえば15が素数かどうか調べたいとして
|