Solved ProjectEuler/012: php, ruby, c

This commit is contained in:
FuryFire 2012-03-08 14:25:58 +01:00
parent 18b050010e
commit edf0ad8674
4 changed files with 83 additions and 0 deletions

30
ProjectEuler/012/desc.yml Normal file

@ -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

23
ProjectEuler/012/solve.c Normal file

@ -0,0 +1,23 @@
#include <stdio.h>
#include <math.h>
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 );
}

@ -0,0 +1,13 @@
<?php
$num = 3;
$tri_add = 2;
do {
$num += ++$tri_add;
$divisors = 2;
$square_root = sqrt($num);
for($div = 2; $div <= $square_root; $div++) {
if($num % $div == 0)
$divisors+= 2;
}
} while ($divisors <= 500);
echo $num;

17
ProjectEuler/012/solve.rb Normal file

@ -0,0 +1,17 @@
num = 3;
tri_add = 2;
begin
tri_add += 1
num += tri_add
divisors = 2;
square_root = Math.sqrt(num);
div = 2
while(div <= square_root)
if(num % div == 0)
divisors += 2;
end
div += 1
end
end until (divisors > 500);
puts num;