removing binaries + new crystal solutions
							parent
							
								
									f678044b9b
								
							
						
					
					
						commit
						9426f02642
					
				|  | @ -1,3 +1,5 @@ | |||
| .DS_Store | ||||
| 
 | ||||
| c/binaries | ||||
| */bin/* | ||||
| *.dwarf | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -1,26 +0,0 @@ | |||
| #wrong approach, should just do recursive trial division... | ||||
| 
 | ||||
| def eratosthenes_sieve(n) | ||||
|   sieve = Array.new(n + 1, true) | ||||
|   sieve[0] = false | ||||
|   sieve[1] = false | ||||
| 
 | ||||
|   2.step(to: Math.sqrt(n)) do |i| | ||||
|     if sieve[i] | ||||
|       (i * i).step(to: n, by: i) do |j| | ||||
|         sieve[j] = false | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   result = sieve.map_with_index { |b, i| b ? i : nil }.compact | ||||
| end | ||||
| 
 | ||||
| def prime_factors(n) | ||||
|   nums = eratosthenes_sieve(n).select { |i| n % i == 0 } | ||||
|   nums = nums + nums.map { |i| n / i } | ||||
| end | ||||
| 
 | ||||
| puts eratosthenes_sieve(600851475143) | ||||
| 
 | ||||
| puts prime_factors(600851475143).max | ||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,23 @@ | |||
| # miscellaneous stuff | ||||
| 
 | ||||
| module Euler | ||||
|   def self.eratosthenes_sieve(n) | ||||
|     sieve = Array.new(n + 1, true) | ||||
|     sieve[0] = false | ||||
|     sieve[1] = false | ||||
| 
 | ||||
|     2.step(to: Math.sqrt(n)) do |i| | ||||
|       if sieve[i] | ||||
|         (i * i).step(to: n, by: i) do |j| | ||||
|           sieve[j] = false | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     result = sieve.map_with_index { |b, i| b ? i : nil }.compact | ||||
|   end | ||||
| 
 | ||||
|   def self.palindrome?(x) | ||||
|     x.to_s.reverse == x.to_s | ||||
|   end | ||||
| end | ||||
|  | @ -0,0 +1,27 @@ | |||
| alias NumType = Int32 | Int64 | UInt32 | UInt64 | ||||
| 
 | ||||
| def trial_division(n : NumType) | ||||
|   factors = [] of NumType | ||||
|   check = ->(p: NumType) { | ||||
|     q, r = n.divmod(p) | ||||
|     while r.zero? | ||||
|       factors << p | ||||
|       n = q | ||||
|       q, r = n.divmod(p) | ||||
|     end | ||||
|   } | ||||
| 
 | ||||
|   check.call(2) | ||||
|   check.call(3) | ||||
|   p = 5 | ||||
|   while p * p <= n | ||||
|     check.call(p) | ||||
|     p += 2 | ||||
|     check.call(p) | ||||
|     p += 4 | ||||
|   end | ||||
|   factors << n if n > 1 | ||||
|   factors | ||||
| end | ||||
| 
 | ||||
| puts trial_division(600851475143).max | ||||
|  | @ -0,0 +1,7 @@ | |||
| require "./euler" | ||||
| 
 | ||||
| def products_of_three_digit_nums | ||||
|   (100..999).to_a.combinations(2).map { |p| p.product } | ||||
| end | ||||
| 
 | ||||
| puts products_of_three_digit_nums.select { |x| Euler.palindrome?(x) }.max | ||||
		Loading…
	
		Reference in New Issue