The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime.
There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.
How many circular primes are there below one million?
%digit_split %echo %prime_list p35()-> A=prime_list(), A!{all_below,1000000,self()}, Primes=lists:filter(fun(2)->true;(5)->true; (X)-> DS=digit_split(X), L=length(DS), L==length(lists:subtract(DS,[0,2,5])) end, receive {primes_below,1000000,V}->V end), put(prime_set,sets:from_list(Primes)), put(circular,[]), put(done,sets:new()), p35(Primes), io:format("~w~n",[length(get(circular))]). p35([])->ok; p35([NextPrime|Others])-> case sets:is_element(NextPrime,get(done)) of true-> p35(Others); false-> DS=digit_split(NextPrime), All=p35(DS,DS,[]), case lists:all(fun(X)->sets:is_element(X,get(prime_set)) end,All) of true-> put(circular,lists:append(get(circular),All)); false-> ok end, put(done,sets:union(get(done),sets:from_list(All))), p35(Others) end. p35(OrigDigs,OrigDigs,All)when length(All)>0 ->All; p35(OrigDigs,NextDigs,All)-> N=list_to_integer(lists:append(lists:map(fun integer_to_list/1,NextDigs))), {First,Tail}=lists:split(length(NextDigs)-1,NextDigs), p35(OrigDigs,lists:append(Tail,First),[list_to_integer(lists:append(lists:map(fun integer_to_list/1,NextDigs)))|All]).
#PrimeList def p35circle(n) s=[n.to_s] (s[0].length-1).times do t=s[-1] s.push(t[1..-1]+t[0..0]) end s.map{|i|i.to_i}.uniq end def p35 settled=Set.new sum=0 ((1...1000000).reject{|i|s=i.to_s; i>9 and (s.include?("0") or s.include?("2") or s.include?("5"))}).each do |i| if settled.include?(i) settled.delete(i) next end circs=p35circle(i) circs[1..-1].each{|j|settled.add j} sum+=circs.length if(circs.all?{|j| PrimeList.isPrime? j}) end puts sum end