Project Euler

Problem #29

Consider all integer combinations of a^(b) for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5:

2^(2)=4, 2^(3)=8, 2^(4)=16, 2^(5)=32
3^(2)=9, 3^(3)=27, 3^(4)=81, 3^(5)=243
4^(2)=16, 4^(3)=64, 4^(4)=256, 4^(5)=1024
5^(2)=25, 5^(3)=125, 5^(4)=625, 5^(5)=3125

If they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms:

4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125

How many distinct terms are in the sequence generated by a^(b) for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?

Clojure: Running time = 3.37s
+;pow

+;cartesian-product

(defn p29 []
  (println
    (count (set (map (fn [[a b]] (pow a b)) (cartesian-product (range 2 101) (range 2 101)))))
  )
)

Erlang: Running time = 0.2s
+%pow

+%cartesian_product

p29()->
	Ans=sets:size(sets:from_list(lists:map(fun([A,B])->pow(A,B) end,cartesian_product([lists:seq(2,100),lists:seq(2,100)])))),
	io:format("~w~n",[Ans]).

Ruby: Running time = 0.08s
+#cartesian_product

def p29
  puts cartesian_product((2..100),(2..100)).map{|a,b|a**b}.uniq.length
end