import java.util.*; import java.io.*; public class Kappa { private static long binomial(int N,int K){ long[][] binomial = new long[N+1][K+1]; for (int k = 1; k <= K; k++) binomial[0][k] = 0; for (int n = 0; n <= N; n++) binomial[n][0] = 1; for (int n = 1; n <= N; n++) for (int k = 1; k <= K; k++) binomial[n][k] = binomial[n-1][k-1] + binomial[n-1][k]; return binomial[N][K]; } private static double binCoeff(int n,int k){ double x = 1.0; for (int r=1;r<=k;r++) x = x*((double)(n-r+1)/(double)r); return x; } private static double log2(double x){ return Math.log(x)/Math.log(2.0); } public static void main(String[] args) throws FileNotFoundException, IOException, Exception { int n = Integer.parseInt(args[0]); // vertices in a graph double p = Double.parseDouble(args[1]); // starting probability (in 0.1 increments) int k = n/3; int m = (int)(((double)binomial(n,3))*p*p*p); double p_ind = ((double)((n-3)*(n-4)*(n-5)))/((double)(n*(n-1)*(n-2))); int q = k*(k-1)/2; double pSat = Math.pow(p_ind,(double)q); double S = binCoeff(m,k); double Sol = S*pSat; double kappa = 0.0; if ((m <= k)) kappa = Double.MAX_VALUE; else kappa = 1.0 - log2(Sol)/log2(S); System.out.println("n "+ n +" p "+ p +" k "+ k +" m "+ m +" p_ind "+ p_ind +" q "+ q +" pSat "+ pSat +" S "+ S +" Sol "+ Sol +" "+ kappa); } }