fork download
  1. from itertools import product
  2. from operator import mul
  3.  
  4. def fact(x, ans=1):
  5. if x<2: return ans
  6. else: return fact(x-1, x*ans)
  7.  
  8. def choose(n, m):
  9. return fact(n)/(fact(m)*fact(n-m))
  10.  
  11. def foo(n,m):
  12. ans = 0
  13.  
  14. for num in product(range(m+1), repeat=n):
  15. if sum(num) == m:
  16. prod = fact(m)
  17. for x in num:
  18. if x>0:
  19. prod *= x**(x-1) / fact(x)
  20. ans += prod * fact(n-1) * choose(n+m,n)
  21.  
  22. return ans
  23.  
  24. for n in range(1,7):
  25. print '%d:'%n,
  26. print '\t'.join(str(foo(n,m)) for m in range(1,9))
  27.  
  28. '''
  29. 1: 2 6 24 240 3600 50400 927360 18869760
  30. 2: 6 36 240 2520 40320 705600 14515200 333849600
  31. 3: 24 240 2400 30240 524160 10644480 246758400 6346771200
  32. 4: 120 1800 25200 393120 7620480 174182400 4510598400 128731680000
  33. 5: 720 15120 282240 5443200 120476160 3073593600 88136294400 2771024256000
  34. 6: 5040 141120 3386880 79833600 2035756800 57959193600 1830744115200 63029904537600
  35. '''
  36.  
  37. print '(SO)n=1:',
  38. print '\t'.join(str(i**(i-1)*(i+1))
  39. for i in range(1, 9))
  40.  
  41. print '(SO)n=2:',
  42. print '\t'.join(str(i**(i-2)*(2*i-1)*(i+1)*(i+2))
  43. for i in range(1,9))
  44.  
  45. print '(SO)n=3:',
  46. print '\t'.join(str(i**(i-3)*(4*i*i-5*i+2)*(i+1)*(i+2)*(i*3))
  47. for i in range(1,9))
  48.  
  49. print '(SO)n=4:',
  50. print '\t'.join(str(i**(i-4)*(4*i-3)*(2*i*i-3*i+2)*(i+1)*(i+2)*(i*3)*(i+4))
  51. for i in range(1,9))
  52.  
  53. '''
  54. (SO)n=1: 2 6 36 320 3750 54432 941192 18874368
  55. (SO)n=2: 6.0 36 300 3360 47250 798336 15731352 353894400
  56. (SO)n=3: 18.0 288.0 4140 66240 1212750 25256448 591740856 15429795840
  57. (SO)n=4: 90.0 2160.0 41580.0 823680 17832150 426746880 11266932600 326361415680
  58. '''
  59.  
Success #stdin #stdout 0.58s 10840KB
stdin
Standard input is empty
stdout
1: 2	6	24	240	3600	50400	927360	18869760
2: 6	36	240	2520	40320	705600	14515200	333849600
3: 24	240	2400	30240	524160	10644480	246758400	6346771200
4: 120	1800	25200	393120	7620480	174182400	4510598400	128731680000
5: 720	15120	282240	5443200	120476160	3073593600	88136294400	2771024256000
6: 5040	141120	3386880	79833600	2035756800	57959193600	1830744115200	63029904537600
(SO)n=1: 2	6	36	320	3750	54432	941192	18874368
(SO)n=2: 6.0	36	300	3360	47250	798336	15731352	353894400
(SO)n=3: 18.0	288.0	4140	66240	1212750	25256448	591740856	15429795840
(SO)n=4: 90.0	2160.0	41580.0	823680	17832150	426746880	11266932600	326361415680