an integer partition problem

本文通过一个实例展示了如何使用Python编程解决整数划分问题,即找到所有将特定整数分为三个不同正整数的方式。通过递归和循环实现,详细列举了将100划分为三个正整数的所有组合,并给出了计数结果,总计784种方式。这种方法对于理解和解决NP难问题有一定帮助。
摘要由CSDN通过智能技术生成

When we mention integer partition numbers, two great mathematic masters naturally come to our minds: Euler and Ramanujan. Since integer partition number has no closed form, Euler's generating function makes it convenient to derive the partition number for any integer in unrestricted or restricted conditions. Euler's Pentagonal Number Thereom deduces a recurrence relation for any integer's partition number.  Even generating function and recurrence relation can help a lot to tackle some partition problems which are usually NP hard, there is some problems that can be easily solved by computer. For Example:

Problem: In how many ways can we partition the integer 100 into three different positive integers? (e.g. 100 = 1+ 2 + 97)

Solution: If we restrict our parts in any partition in ascending order(e.g. 1,2,97 is increasing gradually), we can enumerate all combinations with a python script like the following.

N=100
count=0
for i in range(1,N):
    re = N - i
    for j in range(i+1,re):
        last = N - i - j
        if last > j:
            count += 1
            print("{} {} {}".format(i,j,last))
        else:
            break
print("total: {}".format(count))

Output:

1 2 97
1 3 96
1 4 95
1 5 94
1 6 93
1 7 92
1 8 91
1 9 90
1 10 89
1 11 88
1 12 87
1 13 86
1 14 85
1 15 84
1 16 83
1 17 82
1 18 81
1 19 80
1 20 79
1 21 78
1 22 77
1 23 76
1 24 75
1 25 74
1 26 73
1 27 72
1 28 71
1 29 70
1 30 69
1 31 68
1 32 67
1 33 66
1 34 65
1 35 64
1 36 63
1 37 62
1 38 61
1 39 60
1 40 59
1 41 58
1 42 57
1 43 56
1 44 55
1 45 54
1 46 53
1 47 52
1 48 51
1 49 50
2 3 95
2 4 94
2 5 93
2 6 92
2 7 91
2 8 90
2 9 89
2 10 88
2 11 87
2 12 86
2 13 85
2 14 84
2 15 83
2 16 82
2 17 81
2 18 80
2 19 79
2 20 78
2 21 77
2 22 76
2 23 75
2 24 74
2 25 73
2 26 72
2 27 71
2 28 70
2 29 69
2 30 68
2 31 67
2 32 66
2 33 65
2 34 64
2 35 63
2 36 62
2 37 61
2 38 60
2 39 59
2 40 58
2 41 57
2 42 56
2 43 55
2 44 54
2 45 53
2 46 52
2 47 51
2 48 50
3 4 93
3 5 92
3 6 91
3 7 90
3 8 89
3 9 88
3 10 87
3 11 86
3 12 85
3 13 84
3 14 83
3 15 82
3 16 81
3 17 80
3 18 79
3 19 78
3 20 77
3 21 76
3 22 75
3 23 74
3 24 73
3 25 72
3 26 71
3 27 70
3 28 69
3 29 68
3 30 67
3 31 66
3 32 65
3 33 64
3 34 63
3 35 62
3 36 61
3 37 60
3 38 59
3 39 58
3 40 57
3 41 56
3 42 55
3 43 54
3 44 53
3 45 52
3 46 51
3 47 50
3 48 49
4 5 91
4 6 90
4 7 89
4 8 88
4 9 87
4 10 86
4 11 85
4 12 84
4 13 83
4 14 82
4 15 81
4 16 80
4 17 79
4 18 78
4 19 77
4 20 76
4 21 75
4 22 74
4 23 73
4 24 72
4 25 71
4 26 70
4 27 69
4 28 68
4 29 67
4 30 66
4 31 65
4 32 64
4 33 63
4 34 62
4 35 61
4 36 60
4 37 59
4 38 58
4 39 57
4 40 56
4 41 55
4 42 54
4 43 53
4 44 52
4 45 51
4 46 50
4 47 49
5 6 89
5 7 88
5 8 87
5 9 86
5 10 85
5 11 84
5 12 83
5 13 82
5 14 81
5 15 80
5 16 79
5 17 78
5 18 77
5 19 76
5 20 75
5 21 74
5 22 73
5 23 72
5 24 71
5 25 70
5 26 69
5 27 68
5 28 67
5 29 66
5 30 65
5 31 64
5 32 63
5 33 62
5 34 61
5 35 60
5 36 59
5 37 58
5 38 57
5 39 56
5 40 55
5 41 54
5 42 53
5 43 52
5 44 51
5 45 50
5 46 49
5 47 48
6 7 87
6 8 86
6 9 85
6 10 84
6 11 83
6 12 82
6 13 81
6 14 80
6 15 79
6 16 78
6 17 77
6 18 76
6 19 75
6 20 74
6 21 73
6 22 72
6 23 71
6 24 70
6 25 69
6 26 68
6 27 67
6 28 66
6 29 65
6 30 64
6 31 63
6 32 62
6 33 61
6 34 60
6 35 59
6 36 58
6 37 57
6 38 56
6 39 55
6 40 54
6 41 53
6 42 52
6 43 51
6 44 50
6 45 49
6 46 48
7 8 85
7 9 84
7 10 83
7 11 82
7 12 81
7 13 80
7 14 79
7 15 78
7 16 77
7 17 76
7 18 75
7 19 74
7 20 73
7 21 72
7 22 71
7 23 70
7 24 69
7 25 68
7 26 67
7 27 66
7 28 65
7 29 64
7 30 63
7 31 62
7 32 61
7 33 60
7 34 59
7 35 58
7 36 57
7 37 56
7 38 55
7 39 54
7 40 53
7 41 52
7 42 51
7 43 50
7 44 49
7 45 48
7 46 47
8 9 83
8 10 82
8 11 81
8 12 80
8 13 79
8 14 78
8 15 77
8 16 76
8 17 75
8 18 74
8 19 73
8 20 72
8 21 71
8 22 70
8 23 69
8 24 68
8 25 67
8 26 66
8 27 65
8 28 64
8 29 63
8 30 62
8 31 61
8 32 60
8 33 59
8 34 58
8 35 57
8 36 56
8 37 55
8 38 54
8 39 53
8 40 52
8 41 51
8 42 50
8 43 49
8 44 48
8 45 47
9 10 81
9 11 80
9 12 79
9 13 78
9 14 77
9 15 76
9 16 75
9 17 74
9 18 73
9 19 72
9 20 71
9 21 70
9 22 69
9 23 68
9 24 67
9 25 66
9 26 65
9 27 64
9 28 63
9 29 62
9 30 61
9 31 60
9 32 59
9 33 58
9 34 57
9 35 56
9 36 55
9 37 54
9 38 53
9 39 52
9 40 51
9 41 50
9 42 49
9 43 48
9 44 47
9 45 46
10 11 79
10 12 78
10 13 77
10 14 76
10 15 75
10 16 74
10 17 73
10 18 72
10 19 71
10 20 70
10 21 69
10 22 68
10 23 67
10 24 66
10 25 65
10 26 64
10 27 63
10 28 62
10 29 61
10 30 60
10 31 59
10 32 58
10 33 57
10 34 56
10 35 55
10 36 54
10 37 53
10 38 52
10 39 51
10 40 50
10 41 49
10 42 48
10 43 47
10 44 46
11 12 77
11 13 76
11 14 75
11 15 74
11 16 73
11 17 72
11 18 71
11 19 70
11 20 69
11 21 68
11 22 67
11 23 66
11 24 65
11 25 64
11 26 63
11 27 62
11 28 61
11 29 60
11 30 59
11 31 58
11 32 57
11 33 56
11 34 55
11 35 54
11 36 53
11 37 52
11 38 51
11 39 50
11 40 49
11 41 48
11 42 47
11 43 46
11 44 45
12 13 75
12 14 74
12 15 73
12 16 72
12 17 71
12 18 70
12 19 69
12 20 68
12 21 67
12 22 66
12 23 65
12 24 64
12 25 63
12 26 62
12 27 61
12 28 60
12 29 59
12 30 58
12 31 57
12 32 56
12 33 55
12 34 54
12 35 53
12 36 52
12 37 51
12 38 50
12 39 49
12 40 48
12 41 47
12 42 46
12 43 45
13 14 73
13 15 72
13 16 71
13 17 70
13 18 69
13 19 68
13 20 67
13 21 66
13 22 65
13 23 64
13 24 63
13 25 62
13 26 61
13 27 60
13 28 59
13 29 58
13 30 57
13 31 56
13 32 55
13 33 54
13 34 53
13 35 52
13 36 51
13 37 50
13 38 49
13 39 48
13 40 47
13 41 46
13 42 45
13 43 44
14 15 71
14 16 70
14 17 69
14 18 68
14 19 67
14 20 66
14 21 65
14 22 64
14 23 63
14 24 62
14 25 61
14 26 60
14 27 59
14 28 58
14 29 57
14 30 56
14 31 55
14 32 54
14 33 53
14 34 52
14 35 51
14 36 50
14 37 49
14 38 48
14 39 47
14 40 46
14 41 45
14 42 44
15 16 69
15 17 68
15 18 67
15 19 66
15 20 65
15 21 64
15 22 63
15 23 62
15 24 61
15 25 60
15 26 59
15 27 58
15 28 57
15 29 56
15 30 55
15 31 54
15 32 53
15 33 52
15 34 51
15 35 50
15 36 49
15 37 48
15 38 47
15 39 46
15 40 45
15 41 44
15 42 43
16 17 67
16 18 66
16 19 65
16 20 64
16 21 63
16 22 62
16 23 61
16 24 60
16 25 59
16 26 58
16 27 57
16 28 56
16 29 55
16 30 54
16 31 53
16 32 52
16 33 51
16 34 50
16 35 49
16 36 48
16 37 47
16 38 46
16 39 45
16 40 44
16 41 43
17 18 65
17 19 64
17 20 63
17 21 62
17 22 61
17 23 60
17 24 59
17 25 58
17 26 57
17 27 56
17 28 55
17 29 54
17 30 53
17 31 52
17 32 51
17 33 50
17 34 49
17 35 48
17 36 47
17 37 46
17 38 45
17 39 44
17 40 43
17 41 42
18 19 63
18 20 62
18 21 61
18 22 60
18 23 59
18 24 58
18 25 57
18 26 56
18 27 55
18 28 54
18 29 53
18 30 52
18 31 51
18 32 50
18 33 49
18 34 48
18 35 47
18 36 46
18 37 45
18 38 44
18 39 43
18 40 42
19 20 61
19 21 60
19 22 59
19 23 58
19 24 57
19 25 56
19 26 55
19 27 54
19 28 53
19 29 52
19 30 51
19 31 50
19 32 49
19 33 48
19 34 47
19 35 46
19 36 45
19 37 44
19 38 43
19 39 42
19 40 41
20 21 59
20 22 58
20 23 57
20 24 56
20 25 55
20 26 54
20 27 53
20 28 52
20 29 51
20 30 50
20 31 49
20 32 48
20 33 47
20 34 46
20 35 45
20 36 44
20 37 43
20 38 42
20 39 41
21 22 57
21 23 56
21 24 55
21 25 54
21 26 53
21 27 52
21 28 51
21 29 50
21 30 49
21 31 48
21 32 47
21 33 46
21 34 45
21 35 44
21 36 43
21 37 42
21 38 41
21 39 40
22 23 55
22 24 54
22 25 53
22 26 52
22 27 51
22 28 50
22 29 49
22 30 48
22 31 47
22 32 46
22 33 45
22 34 44
22 35 43
22 36 42
22 37 41
22 38 40
23 24 53
23 25 52
23 26 51
23 27 50
23 28 49
23 29 48
23 30 47
23 31 46
23 32 45
23 33 44
23 34 43
23 35 42
23 36 41
23 37 40
23 38 39
24 25 51
24 26 50
24 27 49
24 28 48
24 29 47
24 30 46
24 31 45
24 32 44
24 33 43
24 34 42
24 35 41
24 36 40
24 37 39
25 26 49
25 27 48
25 28 47
25 29 46
25 30 45
25 31 44
25 32 43
25 33 42
25 34 41
25 35 40
25 36 39
25 37 38
26 27 47
26 28 46
26 29 45
26 30 44
26 31 43
26 32 42
26 33 41
26 34 40
26 35 39
26 36 38
27 28 45
27 29 44
27 30 43
27 31 42
27 32 41
27 33 40
27 34 39
27 35 38
27 36 37
28 29 43
28 30 42
28 31 41
28 32 40
28 33 39
28 34 38
28 35 37
29 30 41
29 31 40
29 32 39
29 33 38
29 34 37
29 35 36
30 31 39
30 32 38
30 33 37
30 34 36
31 32 37
31 33 36
31 34 35
32 33 35
total: 784

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值