I use a website called Project Euler (

www.projecteuler.net) to find problems to work on. Problem 12 on the website asks you to find the first triangle number with 500 or more divisors. SPOILER ALERT: The answer is at the very bottom of this post. Click on Read More to see it. Here is the code I used to figure it out:

```
/* Chuck Woodraska
```

Program Description - 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?

*/

#include <iostream>

#include <math.h>

using namespace std;

int main()

{

// start with the 1st triangle number

int start = 1;

int i = 2; // count for getting the next triangle number (1 + 2 + 3 ...)

int count = 0; // count for how many divisors the particular triangle number has

// Just trying to find the first triangle number to have 500 divisors

while(start < 1000000000)

{

int temp = 1; // reset temp to start the test divisor at 1

// finding all the divisors

while(temp < sqrt(start))

{

//cout << "Test mod: " << start % temp << endl;

// checking if temp is a divisor

if(start % temp == 0)

{

++count;

}

++temp;

}

// double the number of divisors because they come in pairs and we only found the 1st half

// NOTE: if the number is a perfect square this program will not correctly give the number of divisors

// it will give one to many because it will be counting the same number twice

count = count * 2;

// print out the triangle number and its number of divisors

// cout << "Triangle number is: " << start << endl;

// cout << "Divisor total: " << count << endl;

// quit once we find one with more than 500

if(count > 500)

{

cout << "Triangle number is: " << start << endl;

cout << "Divisor total: " << count << endl;

exit(0);

}

// find the next triangle number

start = start +i;

++i;

count = 0;

}

return 0;

}

`The answer:`

`76576500`

## No comments:

## Post a Comment