I actually solved this (more or less) without using maths. I interpreted it as a minimax game where I select where to drop the egg and try to minimize the number of drops, while my opponent chooses whether or not the egg breaks and tries to maximize the number of drops.
If I only have one egg left, I have to drop it at every floor except for the bottom one to find the point.
When I drop an egg at floor k, it will tell me if the target is above or below k. Now we have the same problem with k-1 floors and one fewer egg if it breaks and with n-k+1 floors if it doesn't.
This problem only has 2*n different states, so with memoization/dynamic programming, the solution is O(n^2) = (n states * try n different values of k for each), which is definitely fast enough for 2<= n<=1000.
You can do many further optimizations without using much maths, but it's not really needed. Point is, you can make this into a programming challenge if you want to.