void doimpq(long *start, long *end, long mask, long lvl) { long v, l, msk; long *p, *a, *b; int f; /* pimp(start, end, msk, lvl, end-start); /* */ for(msk = mask; msk; msk &= ~l) { l = msk & -msk; f = 0; if(l < lvl) { for(a=start; a<end; a++) { v = *a; if(v & l) continue; v &= mask; b = bsrch(v|l, a+1, end, mask); if(b == 0) continue; *a |= MARK; *b |= MARK; } continue; } p = end; for(a=start; a<end; a++) { v = *a; if(v & l) continue; v &= mask; b = bsrch(v|l, a+1, end, mask); if(b == 0) continue; if((*a & MARK) && (*b & MARK)) { *p++ = v|MARK; continue; } f = 1; if(p < &itmp[NTMP]) *p++ = v; else { fprintf(stderr, "NTMP to small\n"); #ifdef PLAN9 exits("quine: NTMP too small"); #else exit(1); #endif } *a |= MARK; *b |= MARK; } if(f) doimpq(end, p, mask & ~l, l<<1); } for(a=start; a<end; a++) if(!(*a & MARK)) oterm(*a, mask & ~msk, (ndc==-1)? '%': ':'); }
int main(int argc, char **argv) { int i = 0; /* initialize */ count[1] = 1; for (i = 2; i < COUNT_SZ; i++) count[i] = i + count[i - 1]; while (1) { int num = 0; if (scanf("%d", &num) == EOF) break; i = bsrch(num); int j = num - count[i - 1]; if (i % 2 == 0) printf("TERM %d IS %d/%d\n", num, j, i - j + 1); else printf("TERM %d IS %d/%d\n", num, i - j + 1, j); } return 0; }
int main(){ int arr[], arr_size, elem; int index = bsrch(arr, arr_size, elem); return 0; }