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