start, end = 77777777, 88888888
primes = [2]
for i in range(3, int(end**0.25) + 1, 2):
flag = True
for d in range(2, int(i**0.5) + 1):
if i % d == 0:
flag = False
break
if flag:
primes.append(i)
В Python существует конструкция for… else…. Действия по ветке else выполняются в том случае, если цикл завершился без break. Зная это, код можно слегка сократить:
primes = [2]
for i in range(3, int(end**0.25) + 1, 2):
for d in range(2, int(i**0.5) + 1):
if i % d == 0:
break
else:
primes.append(i)
Теперь будем возводить каждое нечётное простое число в четвёртую степень и умножать на два, пока не попадём в нужный отрезок либо не перескочим через него:
ans = []
# рассматриваем все простые числа, кроме двойки
for el in primes[1:]:
num = el**4
while num <= end:
if num >= start:
ans.append((num, el))
num *= 2
При таком подходе к решению, ответ необходимо отсортировать, так как мы будет получать значения в порядке возрастания простых чисел, а не чисел из отрезка
print(*sorted(ans), sep='\n')
Полное решение на Python:
start, end = 77777777, 88888888
primes = [2]
for i in range(3, int(end**0.25) + 1, 2):
for d in range(2, int(i**0.5) + 1):
if i % d == 0:
break
else:
primes.append(i)
ans = []
for el in primes[1:]:
num = el**4
while num <= end:
if num >= start:
ans.append([num, el])
Do'stlaringiz bilan baham: |