1 |
from math import * |
from math import * |
2 |
|
import java |
3 |
|
|
4 |
def log2birthdayprob(n, k): |
def log2birthdayprob(n, k): |
5 |
"""return log2(p(k balls thrown to n bins, all end up alone)) |
"""return log2(p(k balls thrown to n bins, all end up alone)) |
6 |
""" |
""" |
7 |
|
print n, n-k, log(n), log(n-k), log(n)-log(n-k) |
8 |
|
n = java.math.BigDecimal(n) |
9 |
|
k = java.math.BigDecimal(k) |
10 |
return ( |
return ( |
11 |
(n-k+.5) * (log(n) - log(n-k)) |
(n-k+.5) * (log(n) - log(n-k)) |
12 |
- k |
- k |
18 |
print log2birthdayprob(41, 2) |
print log2birthdayprob(41, 2) |
19 |
print log2birthdayprob(2L**56, 2L**23) |
print log2birthdayprob(2L**56, 2L**23) |
20 |
|
|
21 |
for k in [20, 23]: |
for n in [1, 2, 3, 4, 56]: |
22 |
for n in [56, 60]: |
for k in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]: |
23 |
|
if n <= k: continue |
24 |
print n,k,log2birthdayprob(2L**n,2L**k) |
print n,k,log2birthdayprob(2L**n,2L**k) |
25 |
|
|