回答編集履歴

1

追記

2015/06/10 04:45

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -61,3 +61,57 @@
61
61
  }
62
62
 
63
63
  ```
64
+
65
+
66
+
67
+ ----
68
+
69
+
70
+
71
+ あるいは無駄に配列関数を駆使してみたり
72
+
73
+
74
+
75
+ ```lang-php
76
+
77
+ <?php
78
+
79
+ $prime_list = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31];
80
+
81
+ $result = [];
82
+
83
+ $max = 1 << count($prime_list);
84
+
85
+
86
+
87
+ for ($i=0; $i<$max; $i++) {
88
+
89
+ $arr = array_filter(array_map(
90
+
91
+ function ($a, $b) { return $a * $b; },
92
+
93
+ $prime_list,
94
+
95
+ preg_split("//", strrev(sprintf("%b", $i)), -1, PREG_SPLIT_NO_EMPTY)
96
+
97
+ ));
98
+
99
+ if (count($arr) > 1) {
100
+
101
+ $result[] = [array_product($arr), count($arr), implode("*", $arr)];
102
+
103
+ }
104
+
105
+ }
106
+
107
+
108
+
109
+ foreach ($result as list ($val, $cnt, $expr)) {
110
+
111
+ echo "$expr = $val ... ($cnt)\n";
112
+
113
+ }
114
+
115
+ ```
116
+
117
+