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