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