#include // Tested. Runs in 2m16s. inline int chunksum_0x0f0f0f0f(unsigned long n) { unsigned long x = n & 0x0f0f0f0f; x += x>> 8; x += x>> 16; return x & 0x3f; } int mod17(unsigned long n) { int rv = 17 * 4 + chunksum_0x0f0f0f0f(n) - chunksum_0x0f0f0f0f(n>> 4); while (rv> 16) rv -= 17; return rv; } int main() { unsigned long ii = 0; do { if (mod17(ii) != ii % 17) { printf("failure at %lu: %d != %lu\n", ii, mod17(ii), ii % 17); return 1; } ii++; } while (ii); printf("success\n"); return 0; }

AltStyle によって変換されたページ (->オリジナル) /