/*****************************************************************************/
/*									     */
/*  COMPUTE UPPER BOUND OF MINIMUM					     */
/*  01/15/12 (dkc)							     */
/*									     */
/*  This C program computes the upper bound of the minimum in a 3n+c cycle   */
/*  having a (K+L, K) value equal to a generalized continued-fraction	     */
/*  convergent of log(3)/log(2).					     */
/*									     */
/*****************************************************************************/
#include <stdio.h>
#include <math.h>
unsigned int c=5;
unsigned int conv[148*2]={
 1, 1, 
 2, 1, 
 3, 2, 
 4, 2, 
 5, 3, 
 6, 4, 
 8, 5, 
 9, 6, 
 11, 7, 
 16, 10, 
 19, 12, 
 24, 15, 
 27, 17, 
 38, 24, 
 46, 29, 
 57, 36, 
 65, 41, 
 76, 48, 
 84, 53, 
 130, 82, 
 149, 94, 
 168, 106, 
 233, 147, 
 252, 159, 
 317, 200, 
 336, 212, 
 401, 253, 
 420, 265, 
 485, 306, 
 504, 318, 
 569, 359, 
 970, 612, 
 1054, 665, 
 1455, 918, 
 1539, 971, 
 2108, 1330, 
 2593, 1636, 
 3162, 1995, 
 3647, 2301, 
 4216, 2660, 
 4701, 2966, 
 5270, 3325, 
 5755, 3631, 
 6324, 3990, 
 6809, 4296, 
 7378, 4655, 
 7863, 4961, 
 8432, 5320, 
 8917, 5626, 
 9486, 5985, 
 9971, 6291, 
 10540, 6650, 
 11025, 6956, 
 11594, 7315, 
 12079, 7621, 
 12648, 7980, 
 13133, 8286, 
 13702, 8645, 
 14187, 8951, 
 14756, 9310, 
 15241, 9616, 
 15810, 9975, 
 16295, 10281, 
 16864, 10640, 
 17349, 10946, 
 17918, 11305, 
 18403, 11611, 
 18972, 11970, 
 19457, 12276, 
 20026, 12635, 
 20511, 12941, 
 21080, 13300, 
 21565, 13606, 
 22134, 13965, 
 22619, 14271, 
 23188, 14630, 
 23673, 14936, 
 24242, 15295, 
 24727, 15601, 
 25296, 15960, 
 25781, 16266, 
 49454, 31202, 
 50508, 31867, 
 51562, 32532, 
 76289, 48133, 
 101016, 63734, 
 126797, 80000, 
 152578, 96266, 
 203086, 128133, 
 228867, 144399, 
 279375, 176266, 
 305156, 192532, 
 355664, 224399, 
 381445, 240665, 
 431953, 272532, 
 457734, 288798, 
 508242, 320665, 
 534023, 336931, 
 584531, 368798, 
 610312, 385064, 
 660820, 416931, 
 686601, 433197, 
 737109, 465064, 
 762890, 481330, 
 813398, 513197, 
 839179, 529463, 
 889687, 561330, 
 915468, 577596, 
 965976, 609463, 
 991757, 625729, 
 1042265, 657596, 
 1068046, 673862, 
 1118554, 705729, 
 1144335, 721995, 
 1194843, 753862, 
 1220624, 770128, 
 1271132, 801995, 
 1296913, 818261, 
 1347421, 850128, 
 1373202, 866394, 
 1423710, 898261, 
 1449491, 914527, 
 1499999, 946394, 
 1525780, 962660, 
 1576288, 994527, 
 2999998, 1892788, 
 3076287, 1940921, 
 3152576, 1989054, 
 4652575, 2935448, 
 4728864, 2983581, 
 6228863, 3929975, 
 9305150, 5870896, 
 10881438, 6865423, 
 12457726, 7859950, 
 17110301, 10795398, 
 18686589, 11789925, 
 23339164, 14725373, 
 34220602, 21590796, 
 40449465, 25520771, 
 51330903, 32386194, 
 57559766, 36316169, 
 68441204, 43181592, 
 74670067, 47111567, 
 85551505, 53976990, 
 91780368, 57906965, 
 149340134, 94223134, 
 166450435, 105018532, 
 224010201, 141334701};

int main () {
unsigned int i,K,KL;
double del,del1,delp,delq,delrat,delta,a,factor,limit,log3ac;
del=log(3)/log(2);
del1=del-1.0;
a=3.0*log((double)c)+1.0;
delp=exp(a*log(del))-1.0;   // del^a-1
delq=(del/del1)-a/delp;
log3ac=log(3.0*a*(double)c);
printf("c=%d, delp=%e, delq=%e, log3ac=%e \n",c,delp,delq,log3ac);
printf("\n");
//
factor=1000000000;
for (i=0; i<148; i++) {
   K=conv[2*i+1];
   KL=conv[2*i];
   delta=(double)(KL)*log(2)-(double)K*log(3);
   if (delta<0.0)
      delta=-delta;
   delrat=(del1/delp)*(double)K;
   limit=log(delta)+delrat*log(2)-log3ac;
   limit=limit/delq;
   limit=(limit-1.0)/(double)c;
   limit=1.0/limit;
   printf("limit=%e, K+L=%d, K=%d, ratio=%e\n",limit,KL,K,-delrat/log(delta));
   if ((limit>0.0)&&(limit>factor))
      printf("not monotonic \n");
   if (limit>0.0)
      factor=limit;
   }
return(0);
}