//
/* Generation of FAREY Sequence using the Denominator recurrence */
//
/******************************************************************
/*
f(2*n+1) = f{n) f(2*n+2} = f(n) + f(n+1),
n=0, 1, 2, ...
*/
/******************************************************************
#include "stdio.h"
#include "math.h"
#include "conio.h"
typedef unsigned __int64 UL_int;
UL_int i, n;
UL_int nom, denom;
UL_int MAX = 0;
UL_int SIR[(0x7FFFFFFF>>4)];
FILE * pf;
UL_int f(UL_int n)
{
if(SIR[n]!=0) return SIR[n];
else
{
if ( (n==1) || (n==2) ) {SIR[n] = 1; return 1;}
else if((n%2)==1) {SIR[n] = (f((UL_int)floor(((n-1)/2.0))) + f((UL_int)floor((n+1)/2.0))); return SIR[n];}
else {SIR[n] = f((UL_int)floor(n/ 2.0)); return SIR[n];}
}
}
int main(void) {
//clrscr();
pf=fopen("fractions.txt","w+");
//printf ("\nREC: -> NOM(n) / DENOM(n):\n");
for(i=1;i<8388608 16="16" 2="2" bits="bits" for="for" i="i" numbers="numbers" on="on" p="p">{
nom = f (i) ;
denom = f (i+1) ;
if(MAX
//printf ("\ni=%llu %llu / %llu",i,nom,denom) ;
//fprintf (pf,"\ni=%llu %llu / %llu",i,nom,denom) ;
}
printf ("\nMAX= %llu", MAX) ;
getch () ;
fclose(pf);
return 1;
}
Reference:
http://www.cut-the-knot.org/blue/Fusc.shtml
