You find the smallest number 2 ^ i 3 ^ j 5 ^ k 7 ^ l, which is greater than or equal to some N.
, , N.
1, (i, j, k, l) = (0,0,0,0).
- H S
(, -).
, , N:
- (i, j, k, l) H
- (i + 1, j, k, l), (i, j + 1, k, l), (i, j, k + 1, l) (i, j, k, l +1) H S, S.
, , , / , .
python:
import heapq
N = 85
S = set([(0,0,0,0)])
H = [( 1 , (0,0,0,0) )]
while True:
val,(i,j,k,l) = heapq.heappop(H)
if val >= N:
break
if (i+1,j,k,l) not in S:
S.add((i+1,j,k,l))
heapq.heappush(H,( val*2 , (i+1,j,k,l) ) )
if (i,j+1,k,l) not in S:
S.add((i,j+1,k,l))
heapq.heappush(H,( val*3 , (i,j+1,k,l) ) )
if (i,j,k+1,l) not in S:
S.add((i,j,k+1,l))
heapq.heappush(H,( val*5 , (i,j,k+1,l) ) )
if (i,j,k,l+1) not in S:
S.add((i,j,k,l+1))
heapq.heappush(H,( val*7 , (i,j,k,l+1) ) )
print val
, O (log N) . 3 H S, O (3 log N). , / O (log log N), O (log N * log log N).