What can you recommend to get better at finding efficient solutions to math problems?
The first challenge on Project Euler says:
Find the sum of all the multiples of 3 or 5 below 1000.
The first, and only solution that I could think of was the brute force way:
target = 999 sum = 0 for i = 1 to target do if (i mod 3 = 0) or (i mod 5 = 0) then sum := sum + i output sum
This does give me the correct result, but it becomes exponentially slower the bigger the target is. So then I saw this solution:
target=999 Function SumDivisibleBy(n) p = target div n return n * (p * (p + 1)) div 2 EndFunction Output SumDivisibleBy(3) + SumDivisibleBy(5) - SumDivisibleBy(15)
I don't have trouble understanding how this math works, and upon seeing it I feel as though I could have realised that myself. The problem is just that I never do. I always end up with some exponential, brute force like solution.
Obviously there is a huge difference between understanding a presented solution, and actually realising that solution yourself. And I'm not asking how to be Euler himself.
What I do ask tho is, are there methods and or steps, you can apply to solve math problems to find the best (or at least a good) solution?
If yes, can you guys recommend any books/videos/lectures that teach these methods? And what do you do yourself when attempting to find such solutions?