#include #include #include int main() { uint32_t *vect = calloc(1llu << 22, sizeof(uint32_t)); uint64_t i; for(i = 0; i < (1llu << 32); i++) { if((i & ((1 << 24) - 1)) == 0) { printf("%lu\n", i); } uint64_t v = i; uint64_t v2 = v*v >> 32; uint64_t v3 = v*v2 >> 32; uint32_t distance = ((1llu << 22)-1)*v3 >> 32; if(distance >= 1 << 22) { printf("Bad index\n"); } vect[distance]++; } for(i = 0; i < (1llu << 22)-1; i++) { if(vect[i] == 0) { printf("No way to hit %lu\n", i); } printf("%lu: %u\n", i, vect[i]); } return 0; }