https://projecteuler.net/problem=12
The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
Let us list the factors of the first seven triangle numbers:
1: 1 3: 1,3 6: 1,2,3,6 10: 1,2,5,10 15: 1,3,5,15 21: 1,3,7,21 28: 1,2,4,7,14,28 We can see that 28 is the first triangle number to have over five divisors. What is the value of the first triangle number to have over five hundred divisors?
This is the actual hard part.
After attempting to bruteforce this and speeding it up by doing work in goroutines, it was still too slow (approx 5min on 2016 MBP).
As I was not sure how to cache the intermediate results, and thinking this must be doable quicker, I did a bit of searching. Turns out if we create a prime factorization of a number, the number of divisors is a multiplication of count of individual factors, plus one.
https://www.math.upenn.edu/~deturck/m170/wk2/numdivisors.html
(Another approach: A friend has been talking about searching for coprimes. https://blog.stjepan.io/project-euler-problem-12/)
Whether a number is prime can be cached.
The rest is easy.
Having moved to this method, turns out that it's sufficiently fast that the overhead of communication over channels and of locking the primeness cache is sufficiently high that even two workers are actually slowing down finding of the result. (Probably the actual cause are locks on the map.)
The solution still seems inelegant, but it's good enough for me.