How were they able to figure out that this happened? They deliberately things so that they don’t find the right range. I have been here for a long time, but I am only answering now.
HISTORY = [
(1, 1), (2, 3), (3, 7), (4, 8), (5, 21), (6, 49), (7, 76), (8, 224), (9, 467), (10, 514),
(11, 1155), (12, 2683), (13, 5216), (14, 10544), (15, 26867), (16, 51510),
(17, 95823), (18, 198669), (19, 357535), (20, 863317), (21, 1811764),
(22, 3007503), (23, 5598802), (24, 14428676), (25, 33185509),
(26, 54538862), (27, 111949941), (28, 227634408), (29, 400708894),
(30, 1033162084), (31, 2102388551), (32, 3093472814), (33, 7137437912),
(34, 14133072157), (35, 20112871792), (36, 42387769980), (37, 100251560595),
(38, 146971536592), (39, 323724968937), (40, 1003651412950),
(41, 1458252205147), (42, 2895374552463), (43, 7409811047825),
(44, 15404761757071), (45, 19996463086597), (46, 51408670348612),
(47, 119666659114170), (48, 191206974700443), (49, 409118905032525),
(50, 611140496167764), (51, 2058769515153876), (52, 4216495639600700),
(53, 6763683971478124), (54, 9974455244496707), (55, 30045390491869460),
(56, 44218742292676575), (57, 138245758910846492), (58, 199976667976342049),
(59, 525070384258266191), (60, 1135041350219496382), (61, 1425787542618654982),
(62, 3908372542507822062), (63, 8993229949524469768),
(64, 17799667357578236628), (65, 30568377312064202855), (66, 46346217550346335726),
(67, 132656943602386256302)
]
# The constant in hex: 0x80000000000000000 (2^67)
CONST = 147573952589676412928
for puzzle, key in HISTORY:
hex_key = hex(key)
# Multiply key by 1.004 (as in your earlier example)
multiplied = key * 1.004
# Check if multiplied value is near a multiple of CONST
ratio = multiplied / CONST
print(f"Puzzle {puzzle}:")
print(f" Private Key (dec): {key}")
print(f" Private Key (hex): {hex_key}")
print(f" Multiplied by 1.004: {multiplied:.2f}")
print(f" Ratio to CONST (0x800...): {ratio:.10f}")
print("-" * 50)
The private keys in hex do not directly align with 0x80000000000000000 (no obvious masking or shifting).
--------------------------------------------------
Puzzle 63:
Private Key (dec): 8993229949524469768
Private Key (hex): 0x7cce5efdaccf6808
Multiplied by 1.004: 9029202869322567680.00
Ratio to CONST (0x800...): 0.0611842585
--------------------------------------------------
Puzzle 64:
Private Key (dec): 17799667357578236628
Private Key (hex): 0xf7051f27b09112d4
Multiplied by 1.004: 17870866027008548864.00
Ratio to CONST (0x800...): 0.1210976986
--------------------------------------------------
Puzzle 65:
Private Key (dec): 30568377312064202855
Private Key (hex): 0x1a838b13505b26867
Multiplied by 1.004: 30690650821312462848.00
Ratio to CONST (0x800...): 0.2079679393
--------------------------------------------------
Puzzle 66:
Private Key (dec): 46346217550346335726
Private Key (hex): 0x2832ed74f2b5e35ee
Multiplied by 1.004: 46531602420547723264.00
Ratio to CONST (0x800...): 0.3153104027
--------------------------------------------------
Puzzle 67:
Private Key (dec): 132656943602386256302
Private Key (hex): 0x730fc235c1942c1ae
Multiplied by 1.004: 133187571376795795456.00
Ratio to CONST (0x800...): 0.9025140890
--------------------------------------------------
The keys are randomly generated (or pseudo-randomly derived from an unknown seed).
--------
import math
# Historical data: (puzzle_number, private_key_in_decimal)
HISTORY = [
(1, 1), (2, 3), (3, 7), (4, 8), (5, 21), (6, 49), (7, 76), (8, 224), (9, 467), (10, 514),
(11, 1155), (12, 2683), (13, 5216), (14, 10544), (15, 26867), (16, 51510),
(17, 95823), (18, 198669), (19, 357535), (20, 863317), (21, 1811764),
(22, 3007503), (23, 5598802), (24, 14428676), (25, 33185509),
(26, 54538862), (27, 111949941), (28, 227634408), (29, 400708894),
(30, 1033162084), (31, 2102388551), (32, 3093472814), (33, 7137437912),
(34, 14133072157), (35, 20112871792), (36, 42387769980), (37, 100251560595),
(38, 146971536592), (39, 323724968937), (40, 1003651412950),
(41, 1458252205147), (42, 2895374552463), (43, 7409811047825),
(44, 15404761757071), (45, 19996463086597), (46, 51408670348612),
(47, 119666659114170), (48, 191206974700443), (49, 409118905032525),
(50, 611140496167764), (51, 2058769515153876), (52, 4216495639600700),
(53, 6763683971478124), (54, 9974455244496707), (55, 30045390491869460),
(56, 44218742292676575), (57, 138245758910846492), (58, 199976667976342049),
(59, 525070384258266191), (60, 1135041350219496382), (61, 1425787542618654982),
(62, 3908372542507822062), (63, 8993229949524469768),
(64, 17799667357578236628), (65, 30568377312064202855), (66, 46346217550346335726),
(67, 132656943602386256302)
]
# Calculate exact bit flips between consecutive puzzles
EXACT_FLIPS = []
for i in range(1, len(HISTORY)):
prev_num, prev_key = HISTORY[i-1]
curr_num, curr_key = HISTORY[i]
flips = bin(prev_key ^ curr_key).count('1')
EXACT_FLIPS.append((prev_num, curr_num, flips))
print(f"Puzzle {prev_num}→{curr_num}: {flips} bit flips")
print("\nFull flip count table:")
print("Start → End | Bit Flips")
print("-----------------------")
for entry in EXACT_FLIPS:
print(f"{entry[0]:3} → {entry[1]:3} | {entry[2]:3}")
Puzzle 49→50: 29 bit flips
Puzzle 50→51: 25 bit flips
Puzzle 51→52: 27 bit flips
Puzzle 52→53: 26 bit flips
Puzzle 53→54: 30 bit flips
Puzzle 54→55: 31 bit flips
Puzzle 55→56: 31 bit flips
Puzzle 56→57: 33 bit flips
Puzzle 57→58: 28 bit flips
Puzzle 58→59: 30 bit flips
Puzzle 59→60: 31 bit flips
Puzzle 60→61: 25 bit flips
Puzzle 61→62: 35 bit flips
Puzzle 62→63: 34 bit flips
Puzzle 63→64: 34 bit flips
Puzzle 64→65: 37 bit flips
Puzzle 65→66: 35 bit flips
Puzzle 66→67: 31 bit flips
But bit flips between consecutive private keys are very interesting.

Bit flipping (mutation) helps to find a solution faster, since there are fewer options than in the general range, and if you split it into 20 people, say from 30 to 50 (change one bit option for each), then you can find it even faster, even on the CPU! But for some reason you don’t want to add my idea to Cyclone