From edf0ad86740ffd6fde35092496f47417fa21f637 Mon Sep 17 00:00:00 2001 From: FuryFire Date: Thu, 8 Mar 2012 14:25:58 +0100 Subject: [PATCH] Solved ProjectEuler/012: php, ruby, c --- ProjectEuler/012/desc.yml | 30 ++++++++++++++++++++++++++++++ ProjectEuler/012/solve.c | 23 +++++++++++++++++++++++ ProjectEuler/012/solve.php | 13 +++++++++++++ ProjectEuler/012/solve.rb | 17 +++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 ProjectEuler/012/desc.yml create mode 100644 ProjectEuler/012/solve.c create mode 100644 ProjectEuler/012/solve.php create mode 100644 ProjectEuler/012/solve.rb diff --git a/ProjectEuler/012/desc.yml b/ProjectEuler/012/desc.yml new file mode 100644 index 0000000..7ccb12f --- /dev/null +++ b/ProjectEuler/012/desc.yml @@ -0,0 +1,30 @@ +title: What is the value of the first triangle number to have over five hundred divisors? +url: http://projecteuler.net/problem=12 + +desc: | + 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? + +solution: | + Bruteforce - Still kinda slow - Guessing it could be improved + +solutions: + solve.php: + desc: Basic solution + language: php + solve.rb: + desc: Basic solution + language: ruby + solve.c: + desc: ANSI C solution compiled with TCC + language: c \ No newline at end of file diff --git a/ProjectEuler/012/solve.c b/ProjectEuler/012/solve.c new file mode 100644 index 0000000..616e201 --- /dev/null +++ b/ProjectEuler/012/solve.c @@ -0,0 +1,23 @@ +#include +#include + +int main( ) +{ + long num = 3; + long tri_add = 2; + long div; + int divisors; + int max = 0; + do + { + num += ++tri_add; + divisors = 2; + int square_root = sqrt(num); + for(div = 2; div <= square_root; div++) + { + if(num % div == 0) + divisors+=2; + } + } while(divisors <= 500); + printf( "%i", num ); +} \ No newline at end of file diff --git a/ProjectEuler/012/solve.php b/ProjectEuler/012/solve.php new file mode 100644 index 0000000..3be289d --- /dev/null +++ b/ProjectEuler/012/solve.php @@ -0,0 +1,13 @@ + 500); +puts num; \ No newline at end of file