// requires valid arguments
  static long minWS(int Kprime, int T, int Al, int n) {

    // must cast to long because product may exceed Integer.MAX_VALUE
    return (long) SystematicIndices.ceil(Kprime) * subSymbolSize(T, Al, n);
  }
  // requires valid arguments
  static int KL(long WS, int T, int Al, int n) {

    // must cast to int after getting the minimum to avoid integer overflow
    final int K_upper_bound = (int) Math.min(K_max, WS / subSymbolSize(T, Al, n));
    return SystematicIndices.floor(K_upper_bound);
  }