/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { // probability that j new good elements are produced static double prob(int n, int k, int j) { if( j < 0 || j > k ) return 0; return factd(n - (j + 1)) * factd(k) * (n - k) / (factd(n) * factd(k - j)); } // probabilities that after m experiments we have j good elements static double[] probV(int m, int n, int k) { double[] p = new double[k + 1]; if( m == 0 ) { p[0] = 1.0; } else { double[] pa = probV(m - 1, n, k); // probabilities from previous experiment for( int j = 0; j <= k; j++ ) { for( int ja = 0; ja <= j; ja++ ) { int dj = j - ja; // delta: new elements p[j] += pa[ja] * prob(n - ja, k - ja, dj); } } } return p; } static double factd(int n) { double f = 1.0; for( int nn = 2; nn <= n; nn++ ) f *= nn; return f; } { int n = 8; int k = 4; for( int m = 1; m <= 10; m++ ) { double[] p = probV(m, n, k); } } }
Standard input is empty
m=1 p=[0.5, 0.2857142857142857, 0.14285714285714285, 0.05714285714285714, 0.014285714285714285] m=2 p=[0.25, 0.30612244897959184, 0.24829931972789115, 0.14503401360544216, 0.05054421768707482] m=3 p=[0.125, 0.24635568513119532, 0.28871072238419176, 0.23151149983803043, 0.10842209264658242] m=4 p=[0.0625, 0.17648896293211158, 0.28071829638885026, 0.2974965184259645, 0.18279622225307354] m=5 p=[0.03125, 0.11870797881834946, 0.24649952033507488, 0.33659702287480153, 0.2669454779717739] m=6 p=[0.015625, 0.07676170218191397, 0.20271386464767358, 0.35036316415891067, 0.3545362690115016] m=7 p=[0.0078125, 0.04832811553252227, 0.1593066341980435, 0.344013185006346, 0.4405395652630881] m=8 p=[0.00390625, 0.029848208875727006, 0.12112852723655916, 0.32366195889970045, 0.5214550549880131] m=9 p=[0.001953125, 0.018172190786129715, 0.08983844688410429, 0.2948649458734021, 0.5951712914563637] m=10 p=[9.765625E-4, 0.010942144734931264, 0.06536337029020182, 0.2620373048148024, 0.6606806176600644]