回答編集履歴
1
元ソースの修正による解を例示
answer
CHANGED
@@ -6,6 +6,29 @@
|
|
6
6
|
これだと、`l`の長さに比例する時間が毎回かかってしまいます。
|
7
7
|
`l`に追加した数字の分だけ`t`を減らせばよいのだから、毎回合計を計算する必要はありません。
|
8
8
|
|
9
|
-
解
|
9
|
+
とりあえず、最初の問題だけ解決すれば、動作するようにはなります。(他にいろいろ問題が残っていますが)
|
10
|
+
```python
|
11
|
+
limit = 60
|
12
|
+
list = []
|
13
|
+
for i in range(2, limit):
|
14
|
+
for j in range(2, i):
|
15
|
+
if i % j == 0:
|
16
|
+
break
|
17
|
+
else:
|
18
|
+
list.append(i)
|
10
19
|
|
20
|
+
def get_integral_value_combination(list, target):
|
21
|
+
def a(idx, l, r, t):
|
22
|
+
if t == sum(l): r.append(l)
|
23
|
+
elif t < sum(l): return
|
24
|
+
for u in range(idx, len(list)):
|
25
|
+
a(u, l + [list[u]], r, t)
|
26
|
+
return r
|
27
|
+
return a(0, [], [], target)
|
28
|
+
|
29
|
+
print(get_integral_value_combination(list, 60))
|
30
|
+
```
|
31
|
+
|
32
|
+
他の解法については、以前同じような質問に回答しているので、リンクを貼っておきます。
|
33
|
+
|
11
34
|
https://teratail.com/questions/360119#reply-490932
|