// clang m.c q.s -Wmost -O3; ./a.out #include typedef unsigned long int ul; typedef struct{ul q; ul r;} res; res divq(res a, ul d); res mulq(ul a, ul b); res addq(res, res); static void t(ul a, ul b){res p = mulq(a, b); printf("%016lx %016lx %016lx %016lx\n", a, b, p.q, p.r);} int main(){ res r = divq((res){0, (1L<<32)+4}, 641); printf("%lu %lu\n", r.q, r.r); r = divq((res){4267389842335l, 4628303569333l}, 2398456278938746l); printf("%lu %lu\n", r.q, r.r); r = mulq(64267389842335l, 734628303569333l); printf("%lu %lu\n", r.q, r.r); {res s = addq( (res){3000000000000L, 8L<<60}, (res){8000000000000L, 9L<<60}); printf("%lu %016lx\n", s.q, s.r);} for(int h=0; h<20; ++h) t(1L<<(3*h), 1L<