Skip to content

Instantly share code, notes, and snippets.

@lcc-321
Created November 2, 2011 07:02
Show Gist options
  • Select an option

  • Save lcc-321/1333066 to your computer and use it in GitHub Desktop.

Select an option

Save lcc-321/1333066 to your computer and use it in GitHub Desktop.
F[0]=1; F[1]=1; F[n]=F[n div 2]+F[n div 3]+F[n div 5]+F[n div 7] with Ruby
def loop_f(n)
collect_div_2 = []
collect_div_3 = []
collect_div_5 = []
collect_div_7 = []
div_r = n
while true
div_r /= 2
if div_r == 0 || div_r == 1
collect_div_2 << 1
break
end
collect_div_2 << div_r
end
div_r = n
while true
div_r /= 3
if div_r == 0 || div_r == 1
collect_div_3 << 1
break
end
collect_div_3 << div_r
end
div_r = n
while true
div_r /= 5
if div_r == 0 || div_r == 1
collect_div_5 << 1
break
end
collect_div_5 << div_r
end
div_r = n
while true
div_r /= 7
if div_r == 0 || div_r == 1
collect_div_7 << 1
break
end
collect_div_7 << div_r
end
sum = 0
collect_div_2.each do |div_2|
collect_div_3.each do |div_3|
collect_div_5.each do |div_5|
collect_div_7.each do |div_7|
sum += div_2 + div_3 + div_5 + div_7
end
end
end
end
sum
end
def loop_f_t(n)
t = Time.new
puts loop_f(n)
Time.new - t
end
def gen_test_data()
File.open("/tmp/recursive_to_loop_test_data.txt", "w") do |f|
400000000000.times do |n|
f.write(loop_f(n))
f.write "\n"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment