#!/usr/bin/perl my $x = 1; my $y = 1; use Math::Prime::XS qw(is_prime); my $maxcount = 1000000; open(WRT,">primegrid.svg"); print WRT q( image/svg+xml ); my $gridholder; my $direction; foreach my $number ( 1 ... $maxcount ){ print "$number\r"; if($direction eq ""){ $gridholder->{$x}->{$y} = $number; markprime($x,$y,$number); $direction = 'r'; next; } if($direction eq 'r'){ $x++; $gridholder->{$x}->{$y} = $number; markprime($x,$y,$number); my $yp = $y + 1; if($gridholder->{$x}->{$yp} eq ""){ $direction = 'd'; } next; } if($direction eq 'd'){ $y++; $gridholder->{$x}->{$y} = $number; markprime($x,$y,$number); my $xp = $x - 1; if($gridholder->{$xp}->{$y} eq ""){ $direction = 'l'; } next; } if($direction eq 'l'){ $x--; $gridholder->{$x}->{$y} = $number; markprime($x,$y,$number); my $yp = $y - 1; if($gridholder->{$x}->{$yp} eq ""){ $direction = 'u'; } next; } if($direction eq 'u'){ $y--; $gridholder->{$x}->{$y} = $number; markprime($x,$y,$number); my $xp = $x + 1; if($gridholder->{$xp}->{$y} eq ""){ $direction = 'r'; } next; } } sub markprime { my ($x, $y, $number) = @_; if(is_prime($number)){ print WRT qq( ); } return(); } print WRT q( ); print "done\n";