code: final int getLeapMonth(
          int cycle,
          int yearOfCycle
      ) {
          int[] leapMonths = this.getLeapMonths();
          int elapsedYears = (cycle - 1) * 60 + yearOfCycle - 1;
          int index = 2 * ((elapsedYears - leapMonths[0]) / 3); // first lower bound estimation
          int lm = 0;
  
          while ((index < leapMonths.length)) {
              int test = leapMonths[index];
  
              if (test < elapsedYears) {
                  index += Math.max(2 * ((elapsedYears - test) / 3), 2);
              } else if (test > elapsedYears) {
                  break;
              } else { // test == elapsedYears
                  lm = leapMonths[index + 1];
                  break;
              }
          }
  
          return lm;
      }
docs: number of leap month or zero if no leap year