80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
from sympy import isprime
|
|
|
|
|
|
def print50(a, width=8):
|
|
for i, n in enumerate(a):
|
|
print(f'{n: {width},}', end='\n' if (i + 1) % 10 == 0 else '')
|
|
|
|
|
|
def generate_cyclops(maxdig=9):
|
|
yield 0
|
|
for d in range((maxdig + 1) // 2):
|
|
arr = [str(i) for i in range(10**d, 10**(d+1)) if not('0' in str(i))]
|
|
for left in arr:
|
|
for right in arr:
|
|
yield int(left + '0' + right)
|
|
|
|
|
|
def generate_prime_cyclops():
|
|
for c in generate_cyclops():
|
|
if isprime(c):
|
|
yield c
|
|
|
|
|
|
def generate_blind_prime_cyclops():
|
|
for c in generate_prime_cyclops():
|
|
cstr = str(c)
|
|
mid = len(cstr) // 2
|
|
if isprime(int(cstr[:mid] + cstr[mid+1:])):
|
|
yield c
|
|
|
|
|
|
def generate_palindromic_cyclops(maxdig=9):
|
|
for d in range((maxdig + 1) // 2):
|
|
arr = [str(i) for i in range(10**d, 10**(d+1)) if not('0' in str(i))]
|
|
for s in arr:
|
|
yield int(s + '0' + s[::-1])
|
|
|
|
|
|
def generate_palindromic_prime_cyclops():
|
|
for c in generate_palindromic_cyclops():
|
|
if isprime(c):
|
|
yield c
|
|
|
|
|
|
print('The first 50 cyclops numbers are:')
|
|
gen = generate_cyclops()
|
|
print50([next(gen) for _ in range(50)])
|
|
for i, c in enumerate(generate_cyclops()):
|
|
if c > 10000000:
|
|
print(
|
|
f'\nThe next cyclops number after 10,000,000 is {c} at position {i:,}.')
|
|
break
|
|
|
|
print('\nThe first 50 prime cyclops numbers are:')
|
|
gen = generate_prime_cyclops()
|
|
print50([next(gen) for _ in range(50)])
|
|
for i, c in enumerate(generate_prime_cyclops()):
|
|
if c > 10000000:
|
|
print(
|
|
f'\nThe next prime cyclops number after 10,000,000 is {c} at position {i:,}.')
|
|
break
|
|
|
|
print('\nThe first 50 blind prime cyclops numbers are:')
|
|
gen = generate_blind_prime_cyclops()
|
|
print50([next(gen) for _ in range(50)])
|
|
for i, c in enumerate(generate_blind_prime_cyclops()):
|
|
if c > 10000000:
|
|
print(
|
|
f'\nThe next blind prime cyclops number after 10,000,000 is {c} at position {i:,}.')
|
|
break
|
|
|
|
print('\nThe first 50 palindromic prime cyclops numbers are:')
|
|
gen = generate_palindromic_prime_cyclops()
|
|
print50([next(gen) for _ in range(50)], 11)
|
|
for i, c in enumerate(generate_palindromic_prime_cyclops()):
|
|
if c > 10000000:
|
|
print(
|
|
f'\nThe next palindromic prime cyclops number after 10,000,000 is {c} at position {i}.')
|
|
break
|