每个正整数 n 有 2^(n−1) 个不同的成分。如果我想要仅在我的列表中具有特定数字的组成数量:
例如 4 的组成是
4
3 1
1 3
2 2
2 1 1
1 2 1
1 1 2
1 1 1 1
但是如果我想要只有 1 和 2 的 4 的组合数,我该如何计算不同组合的数量?
2 2
2 1 1
1 2 1
1 1 2
1 1 1 1
编辑: 这里是计算数字的Haskell代码,但我认为即使我为数字70添加记忆也需要很长时间
main :: IO ()
main = do
putStrLn "Enter the integer number"
num' <- getLine
let num = read num' :: Int
putStr ""
let result= composition num
let len=length result
print len
--print result
composition 0 = [[]]
composition n = [x:rest | x <- [1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000],x<=n ,rest <- composition (n-x)]