/******************************************************************************/
/*									      */
/*  COMPARE (K+L, K) MINUS CONTINUED-FRACTIONS CONVERGENTS TO EXPECTED VALUE  */
/*  02/23/11 (dkc)							      */
/*									      */
/*  This C program subtracts generalized continued-fraction convergents of    */
/*  log(3)/log(2) from the (K+L, K) value of a generalized dead limb and      */
/*  determines if the difference is the (K+L, K) value of a shorter	      */
/*  generalized dead limb.						      */
/*									      */
/******************************************************************************/
#include <stdio.h>
#include <math.h>
unsigned int conv[21*2]={
   2, 1,
   4, 2,
   3, 2,
   6, 4,
   9, 6,
   5, 3,
   8, 5,
  16, 10,
  24, 15,
  11, 7,
  19, 12,
  38, 24,
  57, 36,
  76, 48,
  27, 17,
  46, 29,
  65, 41,
 130, 82,
  84, 53,
 149, 94,
 233, 147};

unsigned int table[159*2]={
   0, 0,      // 0
   4, 3,      // 1
   5, 4,      // 2   (6, 2) => (3, 2)
   5, 4,      // 3   (7, 3) => (5, 3)
   6, 5,      // 4
   6, 5,      // 5   (10, 5) => (8, 5)
   7, 6,      // 6
   8, 7,      // 7   (14, 7) => (11, 7)
   8, 7,      // 8
   9, 8,      // 9
   9, 8,      // 10
  10, 9,      // 11
  11, 10,     // 12  (22, 12) => (19, 12)
  11, 10,     // 13
  12, 11,     // 14
  12, 11,     // 15
  13, 12,     // 16
  13, 12,     // 17  (29, 17) => (27, 17)
  14, 13,     // 18
  15, 14,     // 19
  15, 14,     // 20
  16, 15,     // 21
  16, 15,     // 22
  17, 16,     // 23
  18, 17,     // 24
  18, 17,     // 25
  19, 18,     // 26
  19, 18,     // 27
  20, 19,     // 28
  20, 19,     // 29  (48, 29) => (46, 29)
  21, 20,     // 30
  22, 21,     // 31
  22, 21,     // 32
  23, 22,     // 33
  23, 22,     // 34
  24, 23,     // 35
  25, 24,     // 36
  25, 24,     // 37
  26, 25,     // 38
  26, 25,     // 39
  27, 26,     // 40
  27, 26,     // 41  (67, 41) => (65, 41)
  28, 27,     // 42
  29, 28,     // 43
  29, 28,     // 44
  30, 29,     // 45
  30, 29,     // 46
  31, 30,     // 47
  32, 31,     // 48
  32, 31,     // 49
  33, 32,     // 50
  33, 32,     // 51
  34, 33,     // 52
  34, 34,     // 53  (87, 53) => (84, 53)     Note:  Even count the same.
  35, 34,     // 54
  36, 35,     // 55
  36, 35,     // 56
  37, 36,     // 57
  37, 36,     // 58
  38, 37,     // 59
  39, 38,     // 60
  39, 38,     // 61
  40, 39,     // 62
  40, 39,     // 63
  41, 40,     // 64
  42, 41,     // 65
  42, 41,     // 66
  43, 42,     // 67
  43, 42,     // 68
  44, 43,     // 69
  44, 43,     // 70
  45, 44,     // 71
  46, 45,     // 72
  46, 45,     // 73
  47, 46,     // 74
  47, 46,     // 75
  48, 47,     // 76
  49, 48,     // 77
  49, 48,     // 78
  50, 49,     // 79
  50, 49,     // 80
  51, 50,     // 81
  51, 50,     // 82
  52, 51,     // 83
  53, 52,     // 84
  53, 52,     // 85
  54, 53,     // 86
  54, 53,     // 87
  55, 54,     // 88
  56, 55,     // 89
  56, 55,     // 90
  57, 56,     // 91
  57, 56,     // 92
  58, 57,     // 93
  58, 57,     // 94    // (152, 94) => (149, 94)
  59, 58,     // 95
  60, 59,     // 96
  60, 59,     // 97
  61, 60,     // 98
  61, 60,     // 99
  62, 61,     // 100
  63, 62,     // 101
  63, 62,     // 102
  64, 63,     // 103
  64, 63,     // 104
  65, 64,     // 105
  65, 65,     // 106	 // Note:  Even count the same.
  66, 65,     // 107
  67, 66,     // 108
  67, 66,     // 109
  68, 67,     // 110
  68, 67,     // 111
  69, 68,     // 112
  70, 69,     // 113
  70, 69,     // 114
  71, 70,     // 115
  71, 70,     // 116
  72, 71,     // 117
  73, 72,     // 118
  73, 72,     // 119
  74, 73,     // 120
  74, 73,     // 121
  75, 74,     // 122
  75, 74,     // 123
  76, 75,     // 124
  77, 76,     // 125
  77, 76,     // 126
  78, 77,     // 127
  78, 77,     // 128
  79, 78,     // 129
  80, 79,     // 130
  80, 79,     // 131
  81, 80,     // 132
  81, 80,     // 133
  82, 81,     // 134
  82, 82,     // 135	 // Note:  Even count same.
  83, 82,     // 136
  84, 83,     // 137
  84, 83,     // 138
  85, 84,     // 139
  85, 84,     // 140
  86, 85,     // 141
  87, 86,     // 142
  87, 86,     // 143
  88, 87,     // 144
  88, 87,     // 145
  89, 88,     // 146
  89, 88,     // 147
  90, 89,     // 148
  91, 90,     // 149
  91, 90,     // 150
  92, 91,     // 151
  92, 91,     // 152
  93, 92,     // 153
  94, 93,     // 154
  94, 93,     // 155
  95, 94,     // 156
  95, 94,     // 157
  96, 95};    // 158

int main () {
unsigned int i,j,k,l,a,b,c,d,z,delo,dela,delb;
FILE *Outfp;
Outfp = fopen("out2e.dat","w");
for (i=1; i<159; i++) {
   z=table[2*i];       // evens
   a=table[2*i+1];     // evens
   b=i; 	       // odds
   printf(" i=%d, z=%d, a=%d \n",b,z,a);
   for (j=0; j<21; j++) {
      c=conv[2*j];	 // K+L
      d=conv[2*j+1];	 // K
      if (d>=b)
	 continue;
      if ((z+b)<c) {
	 printf("error: i=%d, j=%d, z+b=%d, c=%d \n",i,j,z+b,c);
	 goto zskip;
	 }
      delo=b-d; 	 // delta odds
      dela=z+b-c;	 // delta (evens+odds)
      delb=a+b-c;	 // delta (evens+odds)
      k=table[2*delo]+delo;   // expected delta (evens+odds)
      l=table[2*delo+1]+delo; // expected delta (evens+odds)
      if ((k!=dela)&&(l!=dela)&&(k!=delb)&&(l!=delb)) {
	 printf("error: i=%d, j=%d, k=%d, l=%d, dela=%d, delb=%d \n",i,j,k,l,dela,delb);
	 goto zskip;
	 }
      }
   }
zskip:
fclose(Outfp);
return(0);
}