removing unnecessary macros
parent
251fb30d67
commit
9da04584e6
|
@ -33,47 +33,32 @@ module Euler
|
|||
end
|
||||
end
|
||||
|
||||
macro prime_factorization_method(given_type)
|
||||
def prime_factorization(n : {{given_type}})
|
||||
result = {} of {{given_type}} => Int32
|
||||
factors = self.trial_division(n)
|
||||
|
||||
factors.each do |f|
|
||||
result[f] = 0
|
||||
num = n
|
||||
while num % f == 0
|
||||
result[f] += 1
|
||||
num /= f
|
||||
end
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
macro to_digit_list_method(given_type)
|
||||
def to_digit_list(n : {{given_type}})
|
||||
n.to_s.chars.map { |d| d.to_i }
|
||||
end
|
||||
end
|
||||
|
||||
macro to_big_ints_method(given_type)
|
||||
def to_big_ints(num_list : Array({{given_type}}))
|
||||
num_list.map { |n| BigInt.new(n) }
|
||||
end
|
||||
end
|
||||
|
||||
trial_division_method(NumType)
|
||||
trial_division_method(BigInt)
|
||||
|
||||
prime_factorization_method(NumType)
|
||||
prime_factorization_method(BigInt)
|
||||
def prime_factorization(n : NumType | BigInt)
|
||||
result = {} of (NumType | BigInt) => Int32
|
||||
factors = self.trial_division(n)
|
||||
|
||||
to_digit_list_method(NumType)
|
||||
to_digit_list_method(BigInt)
|
||||
factors.each do |f|
|
||||
result[f] = 0
|
||||
num = n
|
||||
while num % f == 0
|
||||
result[f] += 1
|
||||
num /= f
|
||||
end
|
||||
end
|
||||
|
||||
to_big_ints_method(NumType)
|
||||
to_big_ints_method(BigInt)
|
||||
result
|
||||
end
|
||||
|
||||
def to_big_ints(num_list : Array(NumType))
|
||||
num_list.map { |n| BigInt.new(n) }
|
||||
end
|
||||
|
||||
def to_digit_list(n : NumType | BigInt)
|
||||
n.to_s.chars.map { |d| d.to_i }
|
||||
end
|
||||
|
||||
def palindrome?(x)
|
||||
x.to_s.reverse == x.to_s
|
||||
|
|
|
@ -5,7 +5,7 @@ module Euler
|
|||
extend self
|
||||
|
||||
def integer_factorization_divisible_by_all_up_to(n)
|
||||
result = {} of Euler::NumType => Euler::NumType
|
||||
result = {} of Euler::NumType | BigInt => Int32
|
||||
(2..n).map do |i|
|
||||
Euler.prime_factorization(i).each do |prime, exponent|
|
||||
if !result.has_key?(prime) || (exponent > result[prime])
|
||||
|
@ -16,7 +16,7 @@ module Euler
|
|||
result
|
||||
end
|
||||
|
||||
def factors_to_int(factorization : Hash(Euler::NumType, Euler::NumType))
|
||||
def factors_to_int(factorization : Hash(Euler::NumType | BigInt, Int32))
|
||||
factorization.map { |prime, exponent| prime ** exponent }.product
|
||||
end
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ require "./euler"
|
|||
|
||||
module Euler
|
||||
class Prime
|
||||
# needs to include BigInt ...
|
||||
include Iterator(NumType | BigInt)
|
||||
|
||||
def initialize()
|
||||
|
|
Loading…
Reference in New Issue