回答編集履歴

2

修正

2020/08/22 06:03

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -110,4 +110,48 @@
110
110
 
111
111
 
112
112
 
113
+
114
+
115
+ 素数判定部分を関数化すると
116
+
117
+
118
+
119
+ ```python
120
+
121
+ a = list(range(2, 100))
122
+
123
+
124
+
125
+
126
+
127
+ def is_prime(x):
128
+
129
+ for y in range(2, x):
130
+
131
+ if x % y == 0:
132
+
133
+ return False
134
+
135
+
136
+
137
+ return True
138
+
139
+
140
+
141
+
142
+
143
+ prime = []
144
+
145
+ for x in a:
146
+
147
+ if is_prime(x):
148
+
149
+ prime.append(x)
150
+
151
+ print(prime)
152
+
153
+ ```
154
+
155
+
156
+
113
157
  より効率的に見つけられるアルゴリズムはありますが、定義に従い、素朴に実装すると上記のようになります。

1

修正

2020/08/22 06:03

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -13,3 +13,101 @@
13
13
  print(a)
14
14
 
15
15
  ```
16
+
17
+
18
+
19
+ ## 追記
20
+
21
+
22
+
23
+ > もしあればfilter(関数,配列)のところでlambaを用いない方法を教えていただきたいです。
24
+
25
+
26
+
27
+ `lambda` はただの関数の省略記法なので、`lambda` の部分を関数に置き換えると以下になります。
28
+
29
+
30
+
31
+ ```python
32
+
33
+ a = list(range(2, 100))
34
+
35
+
36
+
37
+ def is_multiple_of_three(x):
38
+
39
+ # x が 3 で割り切れる場合は False そうでない場合は True を返す
40
+
41
+ return x % 3 != 0
42
+
43
+
44
+
45
+ a = list(filter(is_multiple_of_three, a))
46
+
47
+ print(a)
48
+
49
+ ```
50
+
51
+
52
+
53
+ > また今回は3でやりましたが2~100までまとめてfilterにかけることはできるのでしょうか。これに関しては少し自分で考えたいのでできるかどうかを教えていただきたいです。
54
+
55
+
56
+
57
+ filter() 使うより、素数の定義に従って、コードを書いたほうがいいと思います。
58
+
59
+
60
+
61
+ 素数の定義は「2以上の整数」で「1 と自分自身以外で割り切れない数」なので、ある数 `x` が素数かどうかは以下のループで if 文に1つでもマッチするものがあるかどうかで判定できますね。
62
+
63
+
64
+
65
+ ```
66
+
67
+ for y in range(2, x):
68
+
69
+ if x % y == 0:
70
+
71
+ break
72
+
73
+ ```
74
+
75
+
76
+
77
+ なので、1回も条件式に引っかからないものが素数なので、それをリストに追加していけば、素数のリストができます。
78
+
79
+
80
+
81
+ ```python
82
+
83
+ a = list(range(2, 100))
84
+
85
+ prime = []
86
+
87
+
88
+
89
+ for x in a:
90
+
91
+ # 2, ..., x - 1 の中で割り切れる数があるかどうか調べる
92
+
93
+ for y in range(2, x):
94
+
95
+ if x % y == 0:
96
+
97
+ break
98
+
99
+ else:
100
+
101
+ # break しなかった場合
102
+
103
+ # 割り切れる数が 1 または x 以外になければ素数
104
+
105
+ prime.append(x)
106
+
107
+ print(prime)
108
+
109
+ ```
110
+
111
+
112
+
113
+ より効率的に見つけられるアルゴリズムはありますが、定義に従い、素朴に実装すると上記のようになります。