Find The Triangular Number With More Than N Divisors My code is a general solution to the following problem from Project Euler #12:


  What is the value of the first triangle number to have over five hundred divisors?


MY CODE

#include &lt;iostream&gt;
int generate_triangular(int n);
int enumerate_divisors(int n);
int main()
{
    std::cout&lt;&lt;"You want to find the first triangular number with less than or more than how many divisors? "&lt;&lt;std::endl;
    int user_input;
    std::cin&gt;&gt;user_input;
    bool result_found = false;
    int test_number = 1;
    int target;
    while(!result_found){
        int factor_count = enumerate_divisors(generate_triangular(test_number));
        if(factor_count &lt; user_input){
            test_number++;
        }else{
            result_found = true;
            target = generate_triangular(test_number);
        }
    }
    std::cout&lt;&lt;"The "&lt;&lt;test_number&lt;&lt;" th triangular number"&lt;&lt;std::endl;
    std::cout&lt;&lt;target&lt;&lt;std::endl;
}
int generate_triangular(int n){
    return (n*(n+1))/2;
}
int enumerate_divisors(int n){
    int divisor_count = 0;
    for(int i = 1;i*i &lt;= n;i++){
        if(n%i == 0){
            divisor_count++;
        }
    }
    return 2*divisor_count;
}


I found my solution to be quite fast for the purposes of the question (it found the first triangular number with over 500 divisors in about .2 seconds). Wondering how I can make it faster, and about any general code suggestions to be made.
Your naming of variables is hard to reason about. When I think about what your program is doing you, I come up with the following sequence of steps:


Take in a target divisor count.
Index through each triangular number n and check if it satisfies the condition.
If it doesn't increment n and repeat.
Once it does print out the results.


Here is how I would restructure your main loop:

std::cout &lt;&lt; "You want to find the first triangular number with less than or more than how many divisors? " &lt;&lt; std::endl;
int target;
std::cin &gt;&gt; target;
// Indexes the triangle numbers.
int n = 0;
// Keeps track of how many divisors.
int divisors = 0;
do {
    n++;
    divisors = enumerate_divisors(generate_triangular(n));
} while (divisors &lt; target);
std::cout &lt;&lt; "The " &lt;&lt; n &lt;&lt;" th triangular number" &lt;&lt; std::endl;
std::cout &lt;&lt; generate_triangular(n) &lt;&lt; std::endl;


Also, add some spaces in between your function declarations, it's hard to read when everything is clumped together. But don't over do it (in particular, don't double space everything).