回答編集履歴

15

fix

2022/08/06 15:02

投稿

退会済みユーザー
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

2022/08/06 11:42

投稿

退会済みユーザー
test CHANGED
@@ -1,5 +1,6 @@
1
1
  こたえ:
2
+ ループの回数を減らすため。
2
- ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを調べればいいから
3
+ ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを調べればいいから
3
4
 
4
5
  たとえばこの問題は次のようなプログラムでもとける。
5
6
 

13

FIX

2022/08/06 11:34

投稿

退会済みユーザー
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

2022/08/06 11:30

投稿

退会済みユーザー
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

2022/08/06 11:28

投稿

退会済みユーザー
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

2022/08/06 11:27

投稿

退会済みユーザー
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

2022/08/06 11:24

投稿

退会済みユーザー
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

2022/08/06 11:22

投稿

退会済みユーザー
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

2022/08/06 11:22

投稿

退会済みユーザー
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が素数かどうかを調べたい場合、上のコードは16までループしてしまう。
36
+ でも17が素数かどうかを調べたい場合、上のコードはi=16までループしてしまう。
37
-
37
+ 17の平方根は4.123…なので、実際には2~4まで調べればいい。
38
- 17の平方根は4.なにがしなので、実際には2~4まで調べればよい。4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
38
+ 4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
39
+ (4まで調べて割り切る数がなければ、5以上の数で割り切れないことは自明)
39
40
 
40
41
 
41
42
 

6

fix

2022/08/06 11:20

投稿

退会済みユーザー
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
- もしかしたら何か拍子で処理をループに組み込んBreakしないにすかもしれない
34
+ i=3場合15÷3=5なので、割り切る数がある=素数ではない、といことがわかる。
35
+
44
- なっfor上限値を平方根までとする、とするコドが意味を持つかもれない
36
+ でも17が素数かどかを調べい場合コードはは16までてしまう
37
+
38
+ 17の平方根は4.なにがしなので、実際には2~4まで調べればよい。4まで調べて割り切る数がなければ、その時点で素数であると判定できる。
45
39
 
46
40
 
47
41
 

5

add

2022/08/06 11:16

投稿

退会済みユーザー
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

2022/08/06 11:13

投稿

退会済みユーザー
test CHANGED
@@ -13,8 +13,8 @@
13
13
  i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、
14
14
  すでにi=3の場合に調べているので、無駄な処理になる。
15
15
 
16
- もしかしたら何かの拍子で、他の処理をループに組み込んでBREAKしないようにするかもしれない。
16
+ もしかしたら何かの拍子で、他の処理をループに組み込んでBreakしないようにするかもしれない。
17
- そうなったら、平方根までしか数えない、とするコードが意味を持つかもしれない。
17
+ そうなったら、forの上限値を平方根までとする、とするコードが意味を持つかもしれない。
18
18
 
19
19
 
20
20
 

3

FIX

2022/08/06 11:12

投稿

退会済みユーザー
test CHANGED
@@ -6,8 +6,8 @@
6
6
  forループでi=2~14までの数で割り切れるかどうかを調べるとする。
7
7
  i=3の場合、15÷3=5なので、割り切る数がある=素数ではない、ということがわかる。
8
8
 
9
- 「このプログラムではその時点でbreakしてるから、
9
+ 「このプログラムでは割り切れる数が見つかった時点でbreakしてるから、
10
- わざわざ平方根で変換する必要はないでは?」と考えてその主張をするのは、まあ妥当かもしれない。
10
+ 無駄に処理することはない。だからわざわざforの上限値を平方根計算もとめる必要はないでは?」いう主張をするのは、まあ妥当かもしれない。
11
11
 
12
12
  でも「仮に」breakしない場合、iは14までループする。
13
13
  i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、

2

fix

2022/08/06 11:10

投稿

退会済みユーザー
test CHANGED
@@ -3,13 +3,13 @@
3
3
 
4
4
 
5
5
  たとえば15が素数かどうか調べたいとして
6
- forループでi=2~1までの数で割り切れるかどうかを調べるとする。
6
+ forループでi=2~1までの数で割り切れるかどうかを調べるとする。
7
7
  i=3の場合、15÷3=5なので、割り切る数がある=素数ではない、ということがわかる。
8
8
 
9
9
  「このプログラムではその時点でbreakしてるから、
10
10
  わざわざ平方根で変換する必要はないのでは?」と考えてその主張をするのは、まあ妥当かもしれない。
11
11
 
12
- でも「仮に」breakしない場合、iは15までループする。
12
+ でも「仮に」breakしない場合、iは14までループする。
13
13
  i=5の場合、15÷5=3なので、ここでも「割り切る数がある=素数ではない」ということがわかるが、
14
14
  すでにi=3の場合に調べているので、無駄な処理になる。
15
15
 

1

 

2022/08/06 11:10

投稿

退会済みユーザー
test CHANGED
@@ -1,5 +1,5 @@
1
1
  こたえ:
2
- ある数が素数かどうか調べたい場合は、その数の平方根までの数を比較すればよい、ということをプログラム上で表現しているから。
2
+ ある数が素数かどうか調べたい場合は、その数の平方根までの数で割り切れるかどうかを比較すればよい、ということをプログラム上で表現しているから。
3
3
 
4
4
 
5
5
  たとえば15が素数かどうか調べたいとして