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. fact_m = fact(m)
  14.  
  15. for num in product(range(m+1), repeat=n):
  16. if sum(num) == m:
  17. prod = fact_m
  18. for x in num:
  19. if x>0:
  20. prod = prod * x**(x-1) / fact(x) #cannot be '*=' here!
  21. ans += prod
  22.  
  23. return ans * fact(n-1) * choose(n+m, n)
  24.  
  25. for n in range(1,7):
  26. print '%d:'%n,
  27. print '\t'.join(str(foo(n,m)) for m in range(1,9))
  28.  
  29. '''
  30. 1: 2 6 36 320 3750 54432 941192 18874368
  31. 2: 6 36 300 3360 47250 798336 15731352 353894400
  32. 3: 24 240 2760 38640 646800 12628224 281781360 7071989760
  33. 4: 120 1800 27720 480480 9510480 213373440 5365206000 149582315520
  34. 5: 720 15120 302400 6410880 149052960 3824029440 107915734080 3330566553600
  35. 6: 5040 141120 3568320 91324800 2476504800 72313274880 2282004204480 77725396869120
  36. '''
  37.  
  38. print '(SO)n=1:',
  39. print '\t'.join(str(i**(i-1)*(i+1))
  40. for i in range(1, 9))
  41.  
  42. print '(SO)n=2:',
  43. print '\t'.join(str(i**(i-2)*(2*i-1)*(i+1)*(i+2))
  44. for i in range(1,9))
  45.  
  46. print '(SO)n=3:',
  47. print '\t'.join(str(i**(i-3)*(4*i*i-5*i+2)*(i+1)*(i+2)*(i+3))
  48. for i in range(1,9))
  49.  
  50. print '(SO)n=4:',
  51. print '\t'.join(str(i**(i-4)*(4*i-3)*(2*i*i-3*i+2)*(i+1)*(i+2)*(i+3)*(i+4))
  52. for i in range(1,9))
  53.  
  54. '''
  55. (SO)n=1: 2 6 36 320 3750 54432 941192 18874368
  56. (SO)n=2: 6.0 36 300 3360 47250 798336 15731352 353894400
  57. (SO)n=3: 24.0 240.0 2760 38640 646800 12628224 281781360 7071989760
  58. (SO)n=4: 120.0 1800.0 27720.0 480480 9510480 213373440 5365206000 149582315520
  59. '''
  60.  
Success #stdin #stdout 0.52s 10840KB
stdin
Standard input is empty
stdout
1: 2	6	36	320	3750	54432	941192	18874368
2: 6	36	300	3360	47250	798336	15731352	353894400
3: 24	240	2760	38640	646800	12628224	281781360	7071989760
4: 120	1800	27720	480480	9510480	213373440	5365206000	149582315520
5: 720	15120	302400	6410880	149052960	3824029440	107915734080	3330566553600
6: 5040	141120	3568320	91324800	2476504800	72313274880	2282004204480	77725396869120
(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: 24.0	240.0	2760	38640	646800	12628224	281781360	7071989760
(SO)n=4: 120.0	1800.0	27720.0	480480	9510480	213373440	5365206000	149582315520