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?

Project Euler Problem 12

function getNumberOfDivisors(n::UInt64)
        # using sqrt to reduce number of operations by half
        divisors::UInt64 = 0;
        for i in 1:1:(sqrt(n))
                if n%i == 0
                        divisors +=2;
                end
        end
        if sqrt(n)^2 == n
                divisors -=1;
        end     
        return divisors
end




function getNumber(N::UInt64)
        currDivisors::UInt64 = 0;
        currNumber::UInt64 = 0;
        i::UInt64 = 1;
        while currDivisors <= N
                currNumber += i;
                i += 1;
                currDivisors = getNumberOfDivisors(currNumber);
        end     
        return currNumber
end     



function parseARGS()
        if isempty(ARGS)
                numberOfDivisors::UInt64 = 500;
        else    
                numberOfDivisors = tryparse(UInt64,ARGS[1]);
        end     
        return numberOfDivisors
end     

function main()
        numberOfDivisors::UInt64 = parseARGS();
        firstTriangleNumberBelowThreshold = getNumber(numberOfDivisors);
        println(firstTriangleNumberBelowThreshold)
end     

main()

$ julia ProjectEuler0012.jl 5
28
  0.000067 seconds (17 allocations: 912 bytes)

$ julia ProjectEuler0012.jl 10
120
  0.000065 seconds (17 allocations: 912 bytes)
  
$ julia ProjectEuler0012.jl 50
25200
  0.000952 seconds (19 allocations: 944 bytes)

$ julia ProjectEuler0012.jl 100
73920
  0.003015 seconds (19 allocations: 944 bytes)
  
$ julia ProjectEuler0012.jl 250
2162160
  0.085168 seconds (19 allocations: 944 bytes)
  
$ julia ProjectEuler0012.jl 500
76576500
  3.157186 seconds (19 allocations: 944 bytes)

Brute forcing it is too slow! Perhaps there is some clever way to solve this using prime factorization.