Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MathUtils
- def initialize
- @result = nil
- @necessary_primes = nil
- end
- def generate_sums(number, min_parcels = 2, max_parcels = Float::INFINITY, result_file = 'results.txt', &block)
- @result = File.open(result_file, 'w+')
- @block = block
- _partial = [number, 1]
- _generate_sums(_partial, 0, number, number, min_parcels, max_parcels)
- end
- def generate_prime_sums(number, min_parcels = 2, max_parcels = Float::INFINITY, result_file = 'results.txt')
- @necessary_primes = []
- primes_from_file = File.foreach('primes.txt').map(&:to_i)
- primes_from_file.each do |p|
- @necessary_primes << p if p <= number
- end
- primes_from_file = nil
- @necessary_primes.freeze
- generate_sums(number, min_parcels, max_parcels, result_file) do |result|
- (result - @necessary_primes).empty?
- end
- end
- private
- def _generate_sums(_partial, index, number, target, min_parcels, max_parcels)
- return if target < 0
- return if index > max_parcels
- # imprime um resultado válido
- if target == 0 && index >= min_parcels
- if @block
- if @block.call(_partial[0,index])
- @result.puts _partial[0,index].inspect
- end
- else
- @result.puts _partial[0,index].inspect
- end
- end
- index == 0 ? prev = 1 : prev = _partial[index -1]
- k = prev
- while( k <= number)
- _partial[index] = k
- _generate_sums(_partial, index+1, number, target - k, min_parcels, max_parcels)
- k+=1
- end
- end
- end
- # 18, 131, 138, 366
- n=131
- min_p = 4
- max_p = 4
- m = MathUtils.new
- PRIMES_29 = File.foreach('primes.txt').first(29).map(&:to_i)
- # m.generate_prime_sums(n, min_p, max_p, '131_sums_primes_7x7')
- m.generate_sums(n, min_p, max_p, '131_sums_primes_4x4') do |result|
- (result - PRIMES_29).empty?
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement