Cyclops numbers: Difference between revisions

no edit summary
No edit summary
Line 996:
The next prime cyclops number after 10,000,000 is 114808411 at position 67.
</pre>
 
=={{header|Ksh}}==
<lang ksh>
#!/bin/ksh
 
# Cyclops numbers (odd number of digits that has a zero in the center)
# - first 50 cyclops numbers
# - first 50 prime cyclops numbers
# - first 50 blind prime cyclops numbers
# - first 50 palindromic prime cyclops numbers
 
# # Variables:
#
integer MAXN=50
 
# # Functions:
#
 
# # Function _isprime(n) return 1 for prime, 0 for not prime
#
function _isprime {
typeset _n ; integer _n=$1
typeset _i ; integer _i
 
(( _n < 2 )) && return 0
for (( _i=2 ; _i*_i<=_n ; _i++ )); do
(( ! ( _n % _i ) )) && return 0
done
return 1
}
 
# # Function _iscyclops(n) - return 1 for cyclops number
#
function _iscyclops {
typeset _n ; integer _n=$1
 
(( ! ${#_n}&1 )) && return 0 # must have odd number of digits
(( ${_n:$((${#_n}/2)):1} )) && return 0 # must have center zero
[[ $(_blind ${_n}) == *0* ]] && return 0 # No other zeros
 
return 1
}
 
# # Function _blind(n) - return a "blinded" cyclops number
#
function _blind {
typeset _n ; _n="$1"
 
echo "${_n:0:$((${#_n}/2))}${_n:$((${#_n}/2+1)):$((${#_n}/2))}"
}
 
# # Function _ispalindrome(n) - return 1 for palindromic number
#
function _ispalindrome {
typeset _n ; _n="$1"
typeset _flippedn
 
_flippedn=$(_flipit ${_n:$((${#_n}/2+1)):$((${#_n}/2))})
[[ ${_n:0:$((${#_n}/2))} != ${_flippedn} ]] && return 0
return 1
}
 
# # Function _flipit(string) - return flipped string
#
function _flipit {
typeset _buf ; _buf="$1"
typeset _tmp ; unset _tmp
 
for (( _i=$(( ${#_buf}-1 )); _i>=0; _i-- )); do
_tmp="${_tmp}${_buf:${_i}:1}"
done
 
echo "${_tmp}"
}
######
# main #
######
 
integer cy=prcy=blprcy=palprcy=0 # counters
typeset -a cyarr prcyarr blprcyarr palprcyarr
 
for i in {101..909} {11011..99099} {1110111..9990999}; do
_iscyclops ${i} ; (( ! $? )) && continue
(( ++cy <= MAXN )) && cyarr+=( ${i} )
_isprime ${i} ; (( ! $? )) && continue
(( ++prcy <= MAXN )) && prcyarr+=( ${i} )
 
if (( blprcy < MAXN )); then
_isprime $(_blind ${i})
(( $? )) && { (( blprcy++ )) ; blprcyarr+=( ${i} ) }
fi
 
if (( palprcy < MAXN )); then
_ispalindrome ${i}
(( $? )) && { (( palprcy++ )) ; palprcyarr+=( ${i} ) }
fi
 
(( palprcy >= MAXN && blprcy >= MAXN && prcy >= MAXN && cy >= MAXN )) && break
done
 
print "First $MAXN cyclops numbers:"
print ${cyarr[@]}
 
print "\nFirst $MAXN prime cyclops numbers:"
print ${prcyarr[@]}
 
print "\nFirst $MAXN blind prime cyclops numbers:"
print ${blprcyarr[@]}
 
print "\nFirst $MAXN palindromic prime cyclops numbers:"
print ${palprcyarr[@]}
</lang>
{{out}}<pre>
First 50 cyclops numbers:
101 102 103 104 105 106 107 108 109 201 202 203 204 205 206 207 208 209 301 302 303 304 305 306 307 308 309 401 402 403 404 405 406 407 408 409 501 502 503 504 505 506 507 508 509 601 602 603 604 605
 
First 50 prime cyclops numbers:
101 103 107 109 307 401 409 503 509 601 607 701 709 809 907 11027 11047 11057 11059 11069 11071 11083 11087 11093 12011 12037 12041 12043 12049 12071 12073 12097 13033 13037 13043 13049 13063 13093 13099 14011 14029 14033 14051 14057 14071 14081 14083 14087 15013 15017
 
First 50 blind prime cyclops numbers:
101 103 107 109 307 401 503 509 601 607 701 709 809 907 11071 11087 11093 12037 12049 12097 13099 14029 14033 14051 14071 14081 14083 14087 15031 15053 15083 16057 16063 16067 16069 16097 17021 17033 17041 17047 17053 17077 18047 18061 18077 18089 19013 19031 19051 19073
 
First 50 palindromic prime cyclops numbers:
101 16061 31013 35053 38083 73037 74047 91019 94049 1120211 1150511 1160611 1180811 1190911 1250521 1280821 1360631 1390931 1490941 1520251 1550551 1580851 1630361 1640461 1660661 1670761 1730371 1820281 1880881 1930391 1970791 3140413 3160613 3260623 3310133 3380833 3460643 3470743 3590953 3670763 3680863 3970793 7190917 7250527 7310137 7540457 7630367 7690967 7750577 7820287
</pre>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<lang Mathematica>a = Flatten[Table[FromDigits[{i, 0, j}], {i, 9}, {j, 9}], 1];
70

edits