I was a bit disappointed that I had to follow a certain algorithm, but at least I took a few liberties with the 2nd step (Iterate over the expression x^2 + x + p such that 0 < x < p). Oh, and there isn't a single loop, if/unless statement, or subroutine in my entire program ;)
#!/usr/bin/perl -w
use strict;
my($p,$x)=3;p:{$x=0;x:{$_='s`.*(\\$x\\*\\*2\\+\\$x\\+\\$p).*`$1`ee';
eval"y/\\\\//d;$_";keys%_>$ARGV[0]-2?last p:(1x($_))!~/^(11+?)\1+$/x
&&!exists$_{$_}?++$_{$_}:1;++$x;;$x<$p?goto x:last}$p=(sort{$b<=>$a}
keys%_)[0];;goto p}$,=$";eval "@{[print=>q<2,sort{$a<=>$b}keys%_>]}"
Enjoy. (at least until BooK tops it!)