/isPrime
{
/x exch def
/more
{
dup 1 add x sqrt floor le
{
dup 1 add more
} if
} def
1 more
/retval true def
/check
{
dup 1 eq not
{
x exch mod 0 eq
{
/retval false def
%/poppin { dup 1 eq not { pop poppin } if } def
%poppin
}
if
check
}
{ pop }ifelse
}
def check retval
} def
/counter 0 def
/current 2 def
/euler7
{
current isPrime
{
/counter 1 counter add def
} if
counter 10001 eq not
{
/current 1 current add def
euler7
} if
} def
euler7 current pstack
Monday, August 12, 2013
Problem 7 Redo - Postscript
Problem 7 asks for the 10001st prime - making it one of the many, many Project Euler problems that require having a prime sieve. The first time through, I decided to use Racket to solve this problem because I had written prime sieves in Racket before, and I didn't really feel like writing a sieve in yet another language. However, now that I am continuing beyond problem 20, having Racket/Scheme around for future use will be helpful - so, I decided to redo this problem in a language which I have more experience writing an interpreters for (I have written 3) than I actually have experience writing code in - Postscript. Postscript is a stack based language, just like FALSE, except with more readable code and access to more functions (having access to sqrt, floor, ceiling, etc is nice), so even if postfix is a bit weird, this problem was a breeze compared to FALSE.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment