Текстовый файл состоит не более чем из \(10^6\) символов и содержит только десятичные цифры и знаки равенства («=»). Определите максимальную длину последовательности вида «число1=число2=число3=...=числоN», в которой нет соседних знаков «=» и есть хотя бы одно пятизначное число, которое является квадратом простого целого числа. В ответе укажите количество символов.
Решение:
Python
from re import finditer
def is_prime(n):
if n < 2:
return False
if n == 2:
return True
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def is_sq(n):
# Медленный алгоритм
# for i in range(10**2, int((10**5)**0.5) + 1):
# if is_prime(i) and i * i == n:
# return True
# Быстрый алгоритм
tmp = int(n**0.5)
if tmp ** 2 == n and is_prime(tmp):
return True
return False
s = open('7993.txt').readline().strip()
arr = []
n = r'(0|[1-9][0-9]*)'
for g in finditer(rf'{n}(={n})+', s):
tmp = g.group(0).split('=')
lt = len(tmp)
if any(len(x) == 5 and is_sq(int(x)) for x in tmp):
arr.append(len(g.group(0)))
else:
tmp1 = g.group(0)[::-1].split('=')
lt = len(tmp)
for k, t in enumerate((tmp, tmp1)):
for i in range(lt - 1):
curr = t[i]
if len(curr) > 5:
st = curr[-5:] if k == 0 else curr[-5:][::-1]
if is_sq(int(st)):
stmp = '='.join(t[i+1:])
arr.append(len(stmp) + 6)
print(max(arr))
Ответ: \(430\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене