唉!我早就应该想到,这么经典的问题,Mathematica 应该已经自带相应命令,一查果然如此!!!
它们是 PartitionsP 和 IntegerPartitions,前者就是拆分方法数(同样包含 10=10 这种),后者则是列出具体的拆分。
参考:
reference.wolfram.com/language/ref/PartitionsP.html
reference.wolfram.com/language/ref/IntegerPartitions.html
比如,PartitionsP[10] 得出 42,而 IntegerPartitions[10] 得出:
{{10},{9,1},{8,2},{8,1,1},{7,3},{7,2,1},{7,1,1,1},{6,4},{6,3,1},{6,2,2},{6,2,1,1},{6,1,1,1,1},{5,5},{5,4,1},{5,3,2},{5,3,1,1},{5,2,2,1},{5,2,1,1,1},{5,1,1,1,1,1},{4,4,2},{4,4,1,1},{4,3,3},{4,3,2,1},{4,3,1,1,1},{4,2,2,2},{4,2,2,1,1},{4,2,1,1,1,1},{4,1,1,1,1,1,1},{3,3,3,1},{3,3,2,2},{3,3,2,1,1},{3,3,1,1,1,1},{3,2,2,2,1},{3,2,2,1,1,1},{3,2,1,1,1,1,1},{3,1,1,1,1,1,1,1},{2,2,2,2,2},{2,2,2,2,1,1},{2,2,2,1,1,1,1},{2,2,1,1,1,1,1,1},{2,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}}
排列的方式正和我上面手工列的一模一样,都是由大到小。
PartitionsP[50] 的结果是 204226,也和我们得到的一样。
但是 PartitionsP[1000] 得出的是 24061467864032622473692149727991(楼主想求的就是这个数减 1)那就和 9# 的不一样了。 |