Emirp primes: Difference between revisions

Content added Content deleted
m (added to prime numbers.)
Line 3,443: Line 3,443:
The 10,000'th emirp: 948349
The 10,000'th emirp: 948349
</pre>
</pre>
=={{header|Smalltalk}}==
Works with Smalltalk/X

This uses a builtin class called LazyCons, which is useful to implement infinite lists.
The code is functional, looking somewhat Scheme'isch (that's what blocks are for).

First an emirp checker:
<lang smalltalk>isEmirp :=
[:p | |e|
(e := p asString reversed asNumber) isPrime
and:[ e ~= p ]
].</lang>

an infinite list of primes:
<lang smalltalk>primeGen :=
[:n |
LazyCons car:n cdr:[primeGen value:(n nextPrime)]
].</lang>

an infinite list of emirps, taking an infinite list of primes as arg:
<lang smalltalk>emirpGen :=
[:l | |rest el|
rest := l.
[ el := rest car. rest := rest cdr. isEmirp value:el ] whileFalse.
LazyCons car:el cdr:[emirpGen value:rest]
].</lang>
two infinite lists:
<lang smalltalk>listOfPrimes := primeGen value:2.
listOfEmirps := emirpGen value:listOfPrimes.</lang>
generating output:
<lang smalltalk>Transcript
show:'first 20 emirps: ';
showCR:(listOfEmirps take:20) asArray.

Transcript
show:'emirps between 7700 and 8000 are: ';
showCR:((7700 to:8000) select:[:n | n isPrime and:[isEmirp value:n]]).

Transcript
show:'10000''th emirp: ';
showCR:(listOfEmirps nth:10000).</lang>

Generates:<pre>
first 20 emirps: #(13 17 31 37 71 73 79 97 107 113 149 157 167 179 199 311 337 347 359 389)
emirps between 7700 and 8000 are: OrderedCollection(7717 7757 7817 7841 7867 7879 7901 7927 7949 7951 7963)
10000'th emirp: 948349</pre>


=={{header|Stata}}==
=={{header|Stata}}==