質問編集履歴

3

削除

2015/08/14 05:41

投稿

b1ackc0ffee
b1ackc0ffee

スコア267

test CHANGED
File without changes
test CHANGED
@@ -1,273 +1,7 @@
1
- 以下のような練習問題がありま
1
+ *オブジェクト指向って何でか?
2
-
3
- どのような回答をすればいいのでしょうか。
4
-
5
- 力を貸してください。宜しくお願い致します。
6
-
7
- 素数を出すプログラムということは分かるのですが、プログラムの勉強を始めたばかりで><,
8
-
9
- 何がどうなっているかわかりません。
10
2
 
11
3
 
12
4
 
13
- 【問題】
5
+ 「どーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーん」
14
6
 
15
- 以下のプログラムの構造を説明してください
16
-
17
- (コメントアウトで処理の内容を書いてください)
18
-
19
-
20
-
21
- 【参考】
22
-
23
- ・ターミナルでPHPを実行
24
-
25
- ・$arg
26
-
27
- →コマンドライン引数
28
-
29
- →自動生成される
30
-
31
- ・$argv配列??
32
-
33
-
34
-
35
- ```php
36
-
37
-
38
-
39
- /* ここから--Primeクラスの定義-- */
40
-
41
- class Prime {
42
-
43
- private $prime;
44
-
45
-
46
-
47
- public function _construct()
48
-
49
- {
50
-
51
- とりあえず一般的に知られている1ケタの素数をセットしておく
52
-
53
- $this->prime = array(2, 3, 5, 7);
54
-
55
- }
56
-
57
- // @param int $chk $chkまでの素数表を作成する
58
-
59
-
60
-
61
- public function make ($chk)
62
-
63
- {
64
-
65
- $c = count($this->prime);
66
-
67
- $last = $this->prime[$c-1];
68
-
69
- for ($i = $last +2; $i <= $chk; $i +=2){
70
-
71
- is_prime = true;
72
-
73
- foreach ($this->prime as $n) {
74
-
75
- if ($n * $n > $i){
76
-
77
- break;
78
-
79
- }
80
-
81
- if ($i % $n === 0){
82
-
83
- $is_prime = false;
84
-
85
- break;
86
-
87
- }
88
-
89
- }
90
-
91
- if ($is_prime){
92
-
93
- $this->prime[] = $i;
94
-
95
- }
96
-
97
- }
98
-
99
- }
100
-
101
-
102
-
103
- // @param int $n $n番目の素数を返す(zero-based)
104
-
105
- // @return $n番目のs素数、存在しない場合null
106
-
107
- public function get($n)
108
-
109
- {
110
-
111
- $c = count($this->prime);
112
-
113
- if ($c <= $n) {
114
-
115
- return null;
116
-
117
- }
118
-
119
- return $this->prime[$n];
120
-
121
- }
122
-
123
-
124
-
125
- // @return $this->primeの配列の個数を返す
126
-
127
- public function count()
128
-
129
- {
130
-
131
- return count($this->prime);
132
-
133
- }
134
-
135
-
136
-
137
- // 素数表を表示する
138
-
139
- public function display()
140
-
141
- {
142
-
143
- foreach ($this->prime as $i => $p) {
144
-
145
- echo ($i + 1).':'.$p.PHP_EOL;
146
-
147
- }
148
-
149
- }
150
-
151
- }
152
-
153
- /* ここまで--Primeクラスの定義-- */
154
-
155
- // ------------------------------
156
-
157
- /* ここから--Factorクラスの定義-- */
158
-
159
- class Factor {
160
-
161
- private $p;
162
-
163
-
164
-
165
- public function _construct()
166
-
167
- {
168
-
169
- $this->p = new Prime();
170
-
171
- }
172
-
173
-
174
-
175
- // int $n $nを素因数分解するために必要な素数表をつくる
176
-
177
- private function set($n)
178
-
179
- {
180
-
181
- $this->p->make(sqrt($n));
182
-
183
- }
184
-
185
-
186
-
187
- // int $n $nの素因数分解を実行する
188
-
189
- public function exec($n)
190
-
191
- {
192
-
193
- $this->set($n);
194
-
195
-
196
-
197
- $last_idx = 0;
198
-
199
- echo $n.':';
200
-
201
- while ($n > 1) {
202
-
203
- if ($n % $this->p->get($last_idx) == 0){
204
-
205
- $n /= $this->p->get($last_idx);
206
-
207
- echo ''.$this->p->get($last_idx);
208
-
209
- }
210
-
211
- else {
212
-
213
- ++$last_idx;
214
-
215
- }
216
-
217
- if ($this->p->count() === ($last_idx + 1)){
218
-
219
- echo ' '.$n;
220
-
221
- break;
222
-
223
- }
224
-
225
- }
226
-
227
- echo PHP_EOL;
228
-
229
- }
230
-
231
- }
232
-
233
- /* ここまで--Factorクラスの定義-- */
234
-
235
-
236
-
237
- $f = new Factor();
238
-
239
- if ($argc < 2){
240
-
241
- while ($stdin <= fgets(STDIN)) {
242
-
243
- if (trim($stdin) === ''){
244
-
245
- continue;
246
-
247
- }
248
-
249
- $f->exec(intval($stdin, 10));
250
-
251
- }
252
-
253
- }
254
-
255
- else {
256
-
257
- array_shift($argv);
258
-
259
- foreach ($argv as $arg) {
260
-
261
- $f->exec(intval($arg, 10));
262
-
263
- }
264
-
265
- }
266
-
267
- ```
268
-
269
-
270
-
271
-
272
-
273
- 以上、お手数ですくお願致します。
7
+ っていう答えしいす。

2

詳細追加

2015/08/14 05:41

投稿

b1ackc0ffee
b1ackc0ffee

スコア267

test CHANGED
File without changes
test CHANGED
@@ -4,15 +4,31 @@
4
4
 
5
5
  力を貸してください。宜しくお願い致します。
6
6
 
7
+ 素数を出すプログラムということは分かるのですが、プログラムの勉強を始めたばかりで><,
8
+
9
+ 何がどうなっているかわかりません。
10
+
7
11
 
8
12
 
9
13
  【問題】
10
14
 
11
15
  以下のプログラムの構造を説明してください
12
16
 
17
+ (コメントアウトで処理の内容を書いてください)
18
+
19
+
20
+
21
+ 【参考】
22
+
23
+ ・ターミナルでPHPを実行
24
+
25
+ ・$arg
26
+
13
- #プログムの轍
27
+ →コマンドイン引数
14
-
28
+
15
- #素数
29
+ →自動生成される
30
+
31
+ ・$argv配列??
16
32
 
17
33
 
18
34
 

1

画像削除

2015/08/12 16:00

投稿

b1ackc0ffee
b1ackc0ffee

スコア267

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,14 @@
1
- 画像のような練習問題があります。
1
+ 以下のような練習問題があります。
2
2
 
3
3
  どのような回答をすればいいのでしょうか。
4
4
 
5
5
  力を貸してください。宜しくお願い致します。
6
6
 
7
+
8
+
7
- メモ書きしていて、申し訳ありません。
9
+ 【問題】
8
-
9
-
10
-
11
-
12
-
10
+
13
- Q.以下のプログラムの構教えてください
11
+ 以下のプログラムの構説明してください
14
12
 
15
13
  #プログラムの轍
16
14
 
@@ -18,19 +16,239 @@
18
16
 
19
17
 
20
18
 
21
- ![1-1](14ffcac87b212a94f09dcc00f9cc0e01.jpeg)
22
-
23
-
24
-
25
- ![1-2](953347f82a8b9988d36e9b859ef5cd41.jpeg)
26
-
27
-
28
-
29
- ![1-3](e9598c639c0e0b63c055a3892df029b3.jpeg)
30
-
31
-
32
-
33
- ![1-4](6b356b619fb542161830aceed1ecffd9.jpeg)
19
+ ```php
20
+
21
+
22
+
23
+ /* ここから--Primeクラスの定義-- */
24
+
25
+ class Prime {
26
+
27
+ private $prime;
28
+
29
+
30
+
31
+ public function _construct()
32
+
33
+ {
34
+
35
+ とりあえず一般的に知られている1ケタの素数をセットしておく
36
+
37
+ $this->prime = array(2, 3, 5, 7);
38
+
39
+ }
40
+
41
+ // @param int $chk $chkまでの素数表を作成する
42
+
43
+
44
+
45
+ public function make ($chk)
46
+
47
+ {
48
+
49
+ $c = count($this->prime);
50
+
51
+ $last = $this->prime[$c-1];
52
+
53
+ for ($i = $last +2; $i <= $chk; $i +=2){
54
+
55
+ is_prime = true;
56
+
57
+ foreach ($this->prime as $n) {
58
+
59
+ if ($n * $n > $i){
60
+
61
+ break;
62
+
63
+ }
64
+
65
+ if ($i % $n === 0){
66
+
67
+ $is_prime = false;
68
+
69
+ break;
70
+
71
+ }
72
+
73
+ }
74
+
75
+ if ($is_prime){
76
+
77
+ $this->prime[] = $i;
78
+
79
+ }
80
+
81
+ }
82
+
83
+ }
84
+
85
+
86
+
87
+ // @param int $n $n番目の素数を返す(zero-based)
88
+
89
+ // @return $n番目のs素数、存在しない場合null
90
+
91
+ public function get($n)
92
+
93
+ {
94
+
95
+ $c = count($this->prime);
96
+
97
+ if ($c <= $n) {
98
+
99
+ return null;
100
+
101
+ }
102
+
103
+ return $this->prime[$n];
104
+
105
+ }
106
+
107
+
108
+
109
+ // @return $this->primeの配列の個数を返す
110
+
111
+ public function count()
112
+
113
+ {
114
+
115
+ return count($this->prime);
116
+
117
+ }
118
+
119
+
120
+
121
+ // 素数表を表示する
122
+
123
+ public function display()
124
+
125
+ {
126
+
127
+ foreach ($this->prime as $i => $p) {
128
+
129
+ echo ($i + 1).':'.$p.PHP_EOL;
130
+
131
+ }
132
+
133
+ }
134
+
135
+ }
136
+
137
+ /* ここまで--Primeクラスの定義-- */
138
+
139
+ // ------------------------------
140
+
141
+ /* ここから--Factorクラスの定義-- */
142
+
143
+ class Factor {
144
+
145
+ private $p;
146
+
147
+
148
+
149
+ public function _construct()
150
+
151
+ {
152
+
153
+ $this->p = new Prime();
154
+
155
+ }
156
+
157
+
158
+
159
+ // int $n $nを素因数分解するために必要な素数表をつくる
160
+
161
+ private function set($n)
162
+
163
+ {
164
+
165
+ $this->p->make(sqrt($n));
166
+
167
+ }
168
+
169
+
170
+
171
+ // int $n $nの素因数分解を実行する
172
+
173
+ public function exec($n)
174
+
175
+ {
176
+
177
+ $this->set($n);
178
+
179
+
180
+
181
+ $last_idx = 0;
182
+
183
+ echo $n.':';
184
+
185
+ while ($n > 1) {
186
+
187
+ if ($n % $this->p->get($last_idx) == 0){
188
+
189
+ $n /= $this->p->get($last_idx);
190
+
191
+ echo ''.$this->p->get($last_idx);
192
+
193
+ }
194
+
195
+ else {
196
+
197
+ ++$last_idx;
198
+
199
+ }
200
+
201
+ if ($this->p->count() === ($last_idx + 1)){
202
+
203
+ echo ' '.$n;
204
+
205
+ break;
206
+
207
+ }
208
+
209
+ }
210
+
211
+ echo PHP_EOL;
212
+
213
+ }
214
+
215
+ }
216
+
217
+ /* ここまで--Factorクラスの定義-- */
218
+
219
+
220
+
221
+ $f = new Factor();
222
+
223
+ if ($argc < 2){
224
+
225
+ while ($stdin <= fgets(STDIN)) {
226
+
227
+ if (trim($stdin) === ''){
228
+
229
+ continue;
230
+
231
+ }
232
+
233
+ $f->exec(intval($stdin, 10));
234
+
235
+ }
236
+
237
+ }
238
+
239
+ else {
240
+
241
+ array_shift($argv);
242
+
243
+ foreach ($argv as $arg) {
244
+
245
+ $f->exec(intval($arg, 10));
246
+
247
+ }
248
+
249
+ }
250
+
251
+ ```
34
252
 
35
253
 
36
254