-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpartition_function.py
More file actions
71 lines (70 loc) · 1015 Bytes
/
partition_function.py
File metadata and controls
71 lines (70 loc) · 1015 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
'''
部分和として10を含むパターンは少ない
'''
from functools import lru_cache
@lru_cache(maxsize=10**6)
def partition(n,k):
#k個の1以上の変数で総和がn
if n==0:
if k==0:
return [[]]
else:
return []
elif n<k:
return []
elif k==0:
return []
else:
return [[1]+[x for x in seq]for seq in partition(n-1,k-1)]+[[x+1 for x in seq]for seq in partition(n-k,k)]
def partition_list(n):
res=[]
for k in range(n+1):
res+=partition(n,k)
return res
for seq in partition_list(10):
print(*seq)
'''
実行例
10
1 9
2 8
3 7
4 6
5 5
1 1 8
1 2 7
1 3 6
1 4 5
2 2 6
2 3 5
2 4 4
3 3 4
1 1 1 7
1 1 2 6
1 1 3 5
1 1 4 4
1 2 2 5
1 2 3 4
1 3 3 3
2 2 2 4
2 2 3 3
1 1 1 1 6
1 1 1 2 5
1 1 1 3 4
1 1 2 2 4
1 1 2 3 3
1 2 2 2 3
2 2 2 2 2
1 1 1 1 1 5
1 1 1 1 2 4
1 1 1 1 3 3
1 1 1 2 2 3
1 1 2 2 2 2
1 1 1 1 1 1 4
1 1 1 1 1 2 3
1 1 1 1 2 2 2
1 1 1 1 1 1 1 3
1 1 1 1 1 1 2 2
1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 1 1
'''