euler/old-ruby/047.rb

64 lines
1.2 KiB
Ruby
Raw Normal View History

2011-05-31 15:31:13 +00:00
descr=%{
The first two consecutive numbers to have two distinct prime factors are:
14 = 2 × 7
15 = 3 × 5
The first three consecutive numbers to have three distinct prime factors are:
644 = 2² × 7 × 23
645 = 3 × 5 × 43
646 = 2 × 17 × 19.
Find the first four consecutive integers to have four distinct primes factors.
What is the first of these numbers?
}
thoughts=%{
Loop for each number and find it's prime number decomposition (there is no shortcut doing this)
}
puts "Read primes"
$primes=File.read("firsts_1MM_primes.txt").split().collect! { |p| p.to_i }
# the uniq is to transform [2,2,3] into [2,3]
def prime_decomposition(n)
if n <= 1
return []
end
$primes.each do |p|
if n % p == 0
return ( prime_decomposition(n/p) << p ).uniq
end
end
end
size=4
buff=[]
(2..size).each do |n|
buff <<= prime_decomposition(n).length
end
n=size+1
while true
buff <<= prime_decomposition(n).length
found=true
buff.each do |l|
if l != size
found=false
break
end
end
if n%1000 == 0
print "** #{n}: "
p buff
end
break if found
buff.shift
n+=1
end
puts "Solution = #{n+1-size}"