回答編集履歴

1

コード追記

2018/01/23 09:22

投稿

can110
can110

スコア38262

test CHANGED
@@ -29,3 +29,29 @@
29
29
  最後に。
30
30
 
31
31
  ある`s1`と`s2`が決まった場合、`s1+s2+s3=x`を満たす`s3`は1つに決まるので…
32
+
33
+ ```Python
34
+
35
+ def gen_ans1(n,x):
36
+
37
+ for s1 in reversed(range( 3, n+1)):
38
+
39
+ for s2 in reversed(range( 2, s1)):
40
+
41
+ s3 = x - (s1 + s2)
42
+
43
+ if s3 >= 1 and s3 < s2: # 制約条件
44
+
45
+ yield (s1,s2,s3)
46
+
47
+
48
+
49
+ for (n,x) in [(5,9),(100,123),(1000,1234),(10000,12345)]:
50
+
51
+ ret = list(gen_ans1(n,x))
52
+
53
+ print(n,x,len(ret))
54
+
55
+ ```
56
+
57
+ さすがに`n=10000`くらいだと時間かかりますね…