login
A134808
Cyclops numbers.
42
0, 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, 606
OFFSET
1,2
COMMENTS
Numbers with middle digit 0, that have only one digit 0, and the total number of digits is odd; the digit 0 represents the eye of a cyclops.
LINKS
Brady Haran and Simon Pampena, Glitch Primes and Cyclops Numbers, Numberphile video (2015).
EXAMPLE
109 is a cyclops number because 109 has only one digit 0 and this 0 is the middle digit.
MATHEMATICA
cyclopsQ[n_Integer, b_:10] := Module[{digitList = IntegerDigits[n, b], len, pos0s, flag}, len = Length[digitList]; pos0s = Select[Range[len], digitList[[#]] == 0 &]; flag = OddQ[len] && (Length[pos0s] == 1) && (pos0s == {(len + 1)/2}); Return[flag]]; Select[Range[0, 999], cyclopsQ] (* Alonso del Arte, Dec 16 2010 *)
Reap[Do[id=IntegerDigits[n]; If[Position[id, 0]=={{(Length[id]+1)/2}}, Sow[n]], {n, 0, 10^3}]][[2, 1]] (* Zak Seidov, Dec 17 2010 *)
cycQ[n_]:=Module[{idn=IntegerDigits[n], len=IntegerLength[n]}, OddQ[len] && DigitCount[ n, 10, 0]==1&&idn[[(len+1)/2]]==0]; Join[{0}, Select[Range[ 0, 700], cycQ]] (* Harvey P. Dale, Mar 07 2020 *)
PROG
(Sage)
def is_cyclops(n, base=10):
dg = n.digits(base) if n > 0 else [0]
return len(dg) % 2 == 1 and dg[len(dg)//2] == 0 and dg.count(0) == 1
is_A134808 = lambda n: is_cyclops(n)
# D. S. McNeil, Dec 17 2010
(PARI) a(n, {base=10}) = my (l=0); my (r=n-1); while (r >= (base-1)^(2*l), r -= (base-1)^(2*l); l++); return (base^(l+1) * ( (base^l-1)/(base-1) + if (base>2, fromdigits(digits(r \ ((base-1)^l), (base-1)), base)) ) + ( (base^l-1)/(base-1) + if (base>2, fromdigits(digits(r % ((base-1)^l), (base-1)), base)))) \\ Rémy Sigrist, Apr 29 2017
(Python)
from itertools import product
def cyclops(upto=float('inf'), upton=float('inf')): # generator
yield 0
c, n, half_digits, pow10 = 0, 1, 0, 10
while 100**(half_digits+1) < upto and n < upton:
half_digits += 1
pow10 *= 10
for left in product("123456789", repeat=half_digits):
left_plus_eye = int("".join(left))*pow10
for right in product("123456789", repeat=half_digits):
c, n = left_plus_eye + int("".join(right)), n+1
if c <= upto and n <= upton: yield c
print([c for c in cyclops(upto=606)])
print([c for c in cyclops(upton=52)]) # Michael S. Branicky, Jan 05 2021
CROSSREFS
KEYWORD
base,easy,nonn
AUTHOR
Omar E. Pol, Nov 21 2007
STATUS
approved