import java.util.*; import java.io.*; public class Kappa4 { 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); } private static double p2sol(int n){ int k = n/3; double q = (double)(k-1); double p = ((double)((n-3)*(n-4)*(n-5)))/((double)(n*(n-1)*(n-2))); return Math.pow(p,q); } // // probability first triangle is compatible with every other triangle // private static double psol(int n){ double p = 1.0; for (int i=0;n-i >= 6;i=i+3) p = p * p2sol(n-i); return p; } 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 = psol(n); // 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 +" pSol "+ psol(n) +" q "+ q +" pSat "+ pSat +" S "+ S +" Sol "+ Sol +" "+ kappa); } }