# include <stdio.h>

int m, mm1;
double mf, mf0;
double mf1, mf2;

double qc( int f , int t ){
	int s[4], z;
	z = s[3]=(( s[2]=(( s[1]=( s[0]=0 )+t )*f+t)&mm1 )*f+t)&mm1;
	double dd[3]={0,0,0};
	do {
		double w=(( s[0]=s[1] )+0.5)*mf ;
		double x=(( s[1]=s[2] )+0.5)*mf ;
		double y=(( s[2]=s[3] )+0.5)*mf ;
		double z=(( s[3]=(s[3]*f+t)&mm1 )+0.5)*mf ;
		double t = 11*z - 18*y + 9*x - 2*w;
		dd[0] += ( t<0 ? -t : t );
		t = 2*z - 5*y + 4*x - w;
		dd[1] += ( t<0 ? -t : t );
		t = z - 3*y + 3*x - w;
		dd[2] += ( t<0 ? -t : t );
	} while( s[3]-z );
	double p = dd[0]*mf0;
	dd[0] = p > 1 ? 2-p : p ;
	p = dd[1]*mf1 ;
	dd[1] = p > 1 ? 2-p : p ;
	p = dd[2]*mf2 ;
	dd[2] = p > 1 ? 2-p : p ;
	dd[0] = ( dd[0] < dd[1] ? dd[0] : dd[1] ) ;
	return dd[0] < dd[2] ? dd[0] : dd[2] ;
}

int main(void) {
	int b;
	for( b=3 ; b<=8 ; b++ ){
		int f, t, bc , bf[99], bt[99];
		double q, bq=0;
		mm1 = ( m=1<<b )-1;
		mf = 1./m;
		mf0 = mf/5.4534 ;
		mf1 = mf/1.59917 ;
		mf2 = mf/1.05185 ;
		for( f=1 ; f<m ; f+=4 ){
			for( t=1 ; t<m ; t+=2 ){
				q = (1.0/(1LL<<40))*(long long)(qc(f,t)*(1LL<<40));
				if( q >= bq ){
					if( q > bq ){
						bc = 0;
						bq = q;
					}
					bf[bc] = f;
					bt[bc++] = t;
				}
			}
		}
		printf("Bits=%i Quality=%.2f%%\n",b,bq*100);
		for( f=0 ; f<bc ; f++ )
			printf("F=%i T=%i\n",bf[f],bt[f]);
	}
	return 0;
}
