Project Euler

Problem #69

Euler's Totient function, φ(n) [sometimes called the phi function], is used to determine the number of numbers less than n which are relatively prime to n. For example, as 1, 2, 4, 5, 7, and 8, are all less than nine and relatively prime to nine, φ(9)=6.

n Relatively Prime φ(n) n/φ(n)
2 1 1 2
3 1,2 2 1.5
4 1,3 2 2
5 1,2,3,4 4 1.25
6 1,5 2 3
7 1,2,3,4,5,6 6 1.1666...
8 1,3,5,7 4 2
9 1,2,4,5,7,8 6 1.5
10 1,3,7,9 4 2.5

It can be seen that n=6 produces a maximum n/φ(n) for n ≤ 10.

Find the value of n ≤ 1,000,000 for which n/φ(n) is a maximum.

Erlang: Running time = 0.14s
+%echo

+%prime_list

+%prime_iterator

%
% The answer should be the smallest number with the most distinct prime
% factors: thus we multiply the smallest primes together until we hit
% the ceiling
%
% (I could have just printed 2*3*5*7*11*13*17, but that didn't feel
% like much of a program)
%

p69()->
	Iter=prime_iterator(self()),
	Iter!next,
	p69(1,Iter).
p69(Prod,Iter)->
	receive
		{prime,N}->
			if
				N*Prod > 1000000->
					io:format("~w~n",[Prod]);
				true->
					Iter!next,
					p69(Prod*N,Iter)
			end
	end.