Solved ProjectEuler/012: php, ruby, c
This commit is contained in:
30
ProjectEuler/012/desc.yml
Normal file
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
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 );
|
||||||
|
}
|
13
ProjectEuler/012/solve.php
Normal file
13
ProjectEuler/012/solve.php
Normal file
@ -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
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;
|
Reference in New Issue
Block a user