fork download
  1. def stirling_2nd(n, k):
  2. if n == 0 and k == 0:
  3. return 1
  4. elif n == 0 or k == 0:
  5. return 0
  6. else:
  7. return stirling_2nd(n - 1, k - 1) + k * stirling_2nd(n - 1, k)
  8.  
  9. def p0_st(n, k):
  10. return sum(stirling_2nd(n, i) for i in range(1, k + 1))
  11.  
  12. def p0_emp(n, k):
  13. from itertools import product
  14. assignments_set = set()
  15. for slot_assign in product(range(k), repeat=n):
  16. assignment = [list() for _ in range(k)]
  17. for ball, slot in enumerate(slot_assign):
  18. assignment[slot].append(ball)
  19. assignments_set.add(tuple(sorted(tuple(slot) for slot in assignment)))
  20. return len(assignments_set)
  21.  
  22. if __name__ == '__main__':
  23. for i in range(1, 6):
  24. for j in range(1, 6):
  25. assert p0_st(i, j) == p0_emp(i, j), (i, j)
Success #stdin #stdout 0.06s 7724KB
stdin
Standard input is empty
stdout
Standard output is empty