この外側のループ、途中から冗長になりそうです。
```
if first * high < max
    break
```
を入れるとおそらく高速化できます。