login
Nonnegative integers which produce a record maximum MD5 hash.
2

%I #23 Dec 25 2021 11:17:01

%S 0,3,44,65,83,373,575,1126,12673,25670,30268,30525,40691,48240964,

%T 63327632,298506737,369490840,1113434519,1647703600,4958115803,

%U 64657664035,86155378906,184280298746,400812644253,411723964986,714853066875,1627993432495,2607864795784

%N Nonnegative integers which produce a record maximum MD5 hash.

%C a(1) = 0; a(n) is the smallest k such that MD5(k) > MD5(a(n-1)), where integer parameters to MD5 are encoded as base-10 ASCII strings.

%C If a(1) were defined as 1 instead of 0, the sequence would begin 1, 2, 3, 44, ... and then continue in the same way.

%C If we assume that MD5 behaves like a random function from N to {0, ..., 2^128-1}, the expected length of this sequence is the harmonic number H(2^128) ~= 89.3.

%C a(31) > 10^15.

%H Ben Whitmore, <a href="/A349646/b349646.txt">Table of n, a(n) for n = 1..30</a>

%H Wikipedia, <a href="http://en.wikipedia.org/wiki/MD5">MD5</a>

%e a(5) = 83 because MD5("83") = fe9fc289c3ff0af142b6d3bead98a923_16 = 338453431832254946862081270079334951203, which is larger than all previous values MD5("0"), ..., MD5("82").

%t recordsBy[l_, P_] :=

%t Module[{max = -Infinity, x, i, recs = {}},

%t For[i = 1, i <= Length[l], i++,

%t x = P[l[[i]]];

%t If[x > max,

%t max = x;

%t AppendTo[recs, l[[i]]];

%t ]

%t ];

%t recs

%t ];

%t recordsBy[Range[1000], Hash[ToString[#], "MD5"] &]

%o (Python)

%o from hashlib import md5

%o def afind(limit):

%o record = ""

%o for k in range(limit+1):

%o hash = md5(str(k).encode('utf-8')).hexdigest()

%o if hash > record:

%o print(k, end=", ")

%o record = hash

%o afind(10**5) # _Michael S. Branicky_, Nov 24 2021

%Y Record minima: A349647.

%K nonn,base,fini,hard

%O 1,2

%A _Ben Whitmore_, Nov 23 2021