Project Euler Problem 29
Distinct powers.
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?
Link to original description
Source code examples on Github
Python version
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/python terms = {} count = 0 for a in xrange(2,101): for b in xrange(2,101): c = pow(a,b) if not terms.get(c, 0): terms[c] = 1 count = count + 1 print count |
Erlang version
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/usr/bin/env escript %% -*- erlang -*- %%! -smp enable -sname p29 % vim:syn=erlang -mode(compile). main(_) -> io:format("Answer ~p ~n", [t29()]). t29() -> length(deduplicate(lists:flatten([ [math:pow(X, Y), math:pow(Y, X)] || X <- lists:seq(2,100), Y <- lists:seq(2,100)]), [])). deduplicate([],L1) -> L1; deduplicate([H|T], L1) -> case lists:member(H, L1) of true -> deduplicate(T,L1); _ -> deduplicate(T,[H] ++ L1) end. |