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