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}}== |