char ma=0, mb=0;
void find_min_err( int gain ){
int a,b;
int err=32767;
for(a=1;a<16;a++){
for(b=0;b<16;b++){
if((a*b)>gain ) continue;
else{
if((gain-(a*b))<=err){
err = (gain-(a*b));
ma=(char)((a>=b)?(a):(b));
mb=(char)((a<=b)?(a):(b));
}}}}}
void NOD( unsigned int gain ){
if(gain < 16)
printf("0x%02x ",gain);
else if(gain == 16)
printf("0x%02x ",0x0f);
else {
find_min_err(gain+1);
ma-=((gain<226) ?(1):(0));
mb-=((gain==255)?(0):(1));
if(ma>=mb) {ma=((mb<<4)|ma);}
else {ma=((ma<<4)|mb);}
printf("0x%02x ",ma);
}
}
void main(void){
unsigned int x;
for( x=0; x<256; x++){
NOD(x);
if((x&0x0f)==0x0f)
printf("\n");
}
}